如何为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>