C# 不应用样式
我有以下自定义按钮样式的触发器:C# 不应用样式,c#,wpf,C#,Wpf,我有以下自定义按钮样式的触发器: <Trigger Property="IsEnabled" Value="true"> <Setter Property="BorderBrush" Value="#FFFFFFFF" /> <Setter Property="Foreground" Value="#FFFFFFFF" /> </Trigger> <Trigger Property="IsEnabled" Value="fal
<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}"/>
根据,显式设置属性的优先级高于样式触发器(样式触发器本身的优先级高于样式设置器)
从按钮中删除BorderBrush=“#FFFF9800”
将允许样式触发器按预期更改边框笔刷。前台
属性也是如此
但也许更好的解决方案是按名称引用控件模板中的边框:
<Trigger Property="IsEnabled" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="#FFFFFFFF" />
</Trigger>
这会覆盖边框的BorderBrush
属性上的模板绑定,因此即使在按钮上显式设置BorderBrush
属性,它也会应用。根据,显式设置属性的优先级高于样式触发器(样式触发器本身的优先级高于样式设置器)
从按钮中删除BorderBrush=“#FFFF9800”
将允许样式触发器按预期更改边框笔刷。前台
属性也是如此
但也许更好的解决方案是按名称引用控件模板中的边框:
<Trigger Property="IsEnabled" Value="True">
<Setter TargetName="border" Property="BorderBrush" Value="#FFFFFFFF" />
</Trigger>
这将覆盖边框的
BorderBrush
属性上的模板绑定,因此即使您在按钮上显式设置了BorderBrush
属性,它也将应用。您已将键定义为button.Hoverless
类型的DottedXamlName。此类规范用于属性和事件限定引用,也用于附着的成员。因此,请删除该选项。此外,在windows.Resources中创建的资源是已设置密钥的资源,因此它将自动应用。因此,无论何时需要此样式,都应将其定义为style=“{staticResourceKeyName}”
。如果要应用于所有按钮,请删除“键”属性。您正在将按钮上的背景显式设置为#FFFF9800
,这比样式触发器中的设置器具有更高的优先级。使用Buttonbase
作为TargetType
可能有点奇怪,但应该不会有问题,因为Button
继承自Buttonbase
@PieterWitvoet您是对的。这确实解决了问题。你愿意回答这个问题吗?我只需删除按钮本身的属性。有关其他解决方案,请参阅我的编辑。您已将键定义为button.Hoverless
,类型为DottedXamlName。此类规范用于属性和事件限定引用,也用于附着的成员。因此,请删除该选项。此外,在windows.Resources中创建的资源是已设置密钥的资源,因此它将自动应用。因此,无论何时需要此样式,都应将其定义为style=“{staticResourceKeyName}”
。如果要应用于所有按钮,请删除“键”属性。您正在将按钮上的背景显式设置为#FFFF9800
,这比样式触发器中的设置器具有更高的优先级。使用Buttonbase
作为TargetType
可能有点奇怪,但应该不会有问题,因为Button
继承自Buttonbase
@PieterWitvoet您是对的。这确实解决了问题。你愿意回答这个问题吗?我只需要删除按钮本身的属性。请参阅我的编辑以获取其他解决方案。