1

我想为 和 定义一个样式,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不允许样式像那样继承。我想知道我是否可以通过其他任何方式实现这种效果。请注意,我知道我可以使控件模板全局化,并有选择地将它们用于不同的按钮类。这就是我现在正在做的,但我想避免这种情况。

4

1 回答 1

1

实际上,建议的方式有效,您只有一个语法错误。

代替:

BasedOn="ButtonBaseStyle"

和:

BasedOn="{StaticResource ButtonBaseStyle}"
于 2013-06-17T11:09:36.337 回答