我正在尝试创建一个具有特定颜色(例如红色)的按钮。在鼠标悬停时,按钮颜色更改为其他颜色(例如黑色)。
这是我尝试过的:
<Style x:Key="CategoryButton" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
我用它作为:
<Button x:Name="btnCat1" Click="btnCat1_Click" Background="#FFFF1D1D" Style="{StaticResource CategoryButton}">
Hello ...
</Button>
Run Code Online (Sandbox Code Playgroud)
问题是当我说Background="#FFFF1D1D"触发颜色不会对按钮进行任何更改时。
这是因为您已Background在 Button 声明中指定(换句话说,本地值),其优先级高于 Style 触发器。msdn依赖属性值优先级中描述了 WPF 的属性优先级。
页面的简短摘录,包含该问题的相关属性:
最高优先级首先列出
3. 本地值。
6. 风格触发因素。
8. 风格设定者
解决方案是删除本地值并使用 Style 来设置它。
<Button x:Name="btnCat1"
Click="btnCat1_Click"
Style="{StaticResource CategoryButton}">
Hello ...
</Button>
<Style x:Key="CategoryButton" TargetType="Button">
<!-- Set background property here -->
<Setter Property="Background" Value="#FFFF1D1D" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Black"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
如果您不希望为所有 CategoryButton 设置背景,您也可以继承样式
<Style x:Key="RedCategoryButton"
BasedOn="{StaticResource CategoryButton}"
TargetType="{x:Type Button}">
<Setter Property="Background" Value="#FFFF1D1D" />
</Style>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7987 次 |
| 最近记录: |