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

时间:2009-01-20 00:29:24

标签: wpf xaml custom-controls

在Charles Petzold的2007年1月版MSDN杂志(http://msdn.microsoft.com/en-us/magazine/cc163497.aspx)中的“使用模板自定义WPF控件”一文中,他说,

  

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

我目前正在编写一个需要此功能的自定义控件,但无法解决如何按照他的说法进行操作 - 无论如何都无论如何都行不通。有没有人有这样的样本?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以在滚动条示例控件模板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>