如何为WPF中的自定义控件提供两个默认模板?

问题描述:

在查尔斯Petzold的在MSDN杂志的2007年1月版(http://msdn.microsoft.com/en-us/magazine/cc163497.aspx)“使用模板自定义WPF控件”的文章,他说,如何为WPF中的自定义控件提供两个默认模板?

的进度控制实际上有两个方向的两个默认模板。 (这也适用于ScrollBar和Slider。)如果您希望新的ProgressBar支持两种方向,则应该编写两个单独的模板,并在您为ProgressBar定义的Style元素的Triggers部分中选择它们。

我目前正在编写一个需要此功能的自定义控件,但无法解决如何操作,正如他所说的 - 无论如何,无论如何,这种方式无论如何都行不通。有人有这样的例子吗?

在此先感谢。

你可以看到它在滚动条采样控制模板http://msdn.microsoft.com/en-us/library/ms742173.aspx

我只在这里复制的样本的相关部分进行。

总之有在资源字典两个模板:

<ControlTemplate x:Key="VerticalScrollBar" TargetType="{x:Type ScrollBar}"> ... 

<ControlTemplate x:Key="HorizontalScrollBar" TargetType="{x:Type ScrollBar}"> ... 

而且在风格触发它们之间进行切换:

<Style x:Key="{x:Type ScrollBar}" TargetType="{x:Type ScrollBar}"> 
    <Style.Triggers> 
    <Trigger Property="Orientation" Value="Horizontal"> 
     <Setter Property="Template" Value="{StaticResource HorizontalScrollBar}" /> 
    </Trigger> 
    <Trigger Property="Orientation" Value="Vertical"> 
     <Setter Property="Template" Value="{StaticResource VerticalScrollBar}" /> 
    </Trigger> 
    </Style.Triggers> 
</Style>