在不同按钮类型之间共享控件模板

时间:2013-06-17 10:59:01

标签: wpf

我想为ButtonBase定义一种样式,然后以TogglebuttonButton的不同方式扩展该样式。我想要这样的东西:

<!-- Base Style -->
<Style x:Key="ButtonBaseStyle" TargetType="ButtonBase">
    <Style.Resources>
      <ControlTemplate x:Key="NormalStyle" TargetType="ButtonBase">...</ControlTemplate>
      <ControlTemplate x:Key="HoverStyle" TargetType="ButtonBase">...</ControlTemplate>
    </Style.Resources>
    <Style.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
         <Setter Property="Template" Value="{StaticResource HoverStyle}" />
      </Trigger>
      <Trigger Property="IsMouseOver" Value="False">
         <Setter Property="Template" Value="{StaticResource NormalStyle}" />
      </Trigger>
    </Style.Triggers>
</Style> 

<!-- Toggle Button -->
<Style x:Key="ToggleButtonStyle" TargetType="ToggleButton" BasedOn="ButtonBaseStyle">
    <Style.Resources>
       <ControlTemplate x:Key="CheckedStyle" TargetType="ToggleButton">...</ControlTemplate>
    </Style.Resources>
    <Style.Triggers>
      <!-- ToggleButton should inherit the triggers defined in ButtonBaseStyle; adding the additional trigger specific to ToggleButton here -->
      <Trigger Property="IsChecked" Value="True">
         <Setter Property="Template" Value="{StaticResource CheckedStyle}" />
      </Trigger>
    </Style.Triggers>
 </Style>

ToggleButton的样式声明是错误的。 WPF不允许样式继承。我想知道我是否能以任何其他方式实现这种效果。请注意,我知道我可以使控件模板全局化并有选择地将它们用于不同的按钮类。这就是我现在正在做的事情,但我想避免这样做。

1 个答案:

答案 0 :(得分:1)

实际上提议的方法有效,你只有一个语法错误。

替换:

BasedOn="ButtonBaseStyle"

使用:

BasedOn="{StaticResource ButtonBaseStyle}"