我在自定义按钮样式中有以下触发器:
<Trigger Property="IsEnabled" Value="true">
<Setter Property="BorderBrush" Value="#FFFFFFFF" />
<Setter Property="Foreground" Value="#FFFFFFFF" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="BorderBrush" Value="#FFFF9800" />
<Setter Property="Foreground" Value="#FFFF9800" />
</Trigger>
但它们根本不适用于我的GUI。以下是整个风格。
<Window.Resources>
<Style x:Key="Button.Hoverless" TargetType="{x:Type ButtonBase}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ButtonBase}">
<Border Name="border"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}"
BorderBrush="{TemplateBinding BorderBrush}"
Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="Selector.IsSelected" Value="False" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="#FFFF9800" />
<Setter Property="Opacity" Value="0.50" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="Selector.IsSelected" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="#FFFFB850" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver" Value="False" />
<Condition Property="Selector.IsSelected" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" Value="#FFFF9800" />
</MultiTrigger>
<Trigger Property="IsEnabled" Value="true">
<Setter Property="BorderBrush" Value="#FFFFFFFF" />
<Setter Property="Foreground" Value="#FFFFFFFF" />
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="BorderBrush" Value="#FFFF9800" />
<Setter Property="Foreground" Value="#FFFF9800" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="border" Property="Opacity" Value="0.95" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
我是WPF样式的新手,因此我不确定我在哪里出错了。还包括按钮代码:
<Button x:Name="btnScanFP1" Content="Scan Fingerprint" Grid.Column="1"
HorizontalAlignment="Left" Margin="10,10,0,0" Grid.Row="4" VerticalAlignment="Top"
Width="227" Height="21" Grid.ColumnSpan="2" FontSize="11" Click="btnScanFP1_Click"
Background="{x:Null}" BorderBrush="#FFFF9800" Foreground="#FFFF9800"
Style="{StaticResource Button.Hoverless}"/>
答案 0 :(得分:4)
根据Dependency Property Setting Precedence List,显式设置属性的优先级高于样式触发器(它本身的优先级高于样式设置器)。
从按钮中删除BorderBrush="#FFFF9800"
将允许样式触发器按预期更改边框画笔。 Foreground
属性也是如此。
但也许更好的解决方案是按名称引用控件模板中的边框:
<Trigger Property="IsEnabled" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="#FFFFFFFF" />
</Trigger>
这会覆盖边框BorderBrush
属性上的模板绑定,因此即使您在按钮上明确设置了BorderBrush
属性,它也会适用。