我想为ButtonBase
定义一种样式,然后以Togglebutton
和Button
的不同方式扩展该样式。我想要这样的东西:
<!-- 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
不允许样式继承。我想知道我是否能以任何其他方式实现这种效果。请注意,我知道我可以使控件模板全局化并有选择地将它们用于不同的按钮类。这就是我现在正在做的事情,但我想避免这样做。
答案 0 :(得分:1)
实际上提议的方法有效,你只有一个语法错误。
替换:
BasedOn="ButtonBaseStyle"
使用:
BasedOn="{StaticResource ButtonBaseStyle}"