WPF 样式:如何更改触发器中的 GradientStop 颜色
Posted
技术标签:
【中文标题】WPF 样式:如何更改触发器中的 GradientStop 颜色【英文标题】:WPF Style: how to change GradientStop Color in Trigger 【发布时间】:2011-01-30 01:50:59 【问题描述】:我有一个按钮样式:
<Style x:Key="ButtonStyle1" TargetType="x:Type Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type Button">
<Grid>
<Path x:Name="path1" ... Data="...some data...">
<Path.Fill>
<LinearGradientBrush EndPoint="0.5,-0.3" StartPoint="0.5,0.8">
<GradientStop x:Name="gs1" Color="Green" Offset="0.44"/>
<GradientStop Color="Black" Offset="0.727"/>
</LinearGradientBrush>
</Path.Fill>
</Path>
<ContentPresenter ...properties... />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="???" Property="Color" Value="Green"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
当鼠标悬停在按钮上时,我想用 x:Name="gs1" 更改 GradientStop 的颜色,所以我使用 Trigger IsMouseOver。如何访问触发器中的颜色属性?我试过 TargetName="gs1" 和 TargetName="path1.gs1" 但它不起作用。有什么想法吗?
【问题讨论】:
【参考方案1】:我认为您将不得不更换整个刷子。 Here is a good example 的按钮样式。
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Fill" TargetName="path1">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,-0.3" StartPoint="0.5,0.8">
<GradientStop Color="Black" Offset="0.44"/>
<GradientStop Color="Green" Offset="0.727"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
【讨论】:
还有一种方法可以在 XAML 中对 GradientStops 进行索引,但我无法找到一个可以工作的示例......类似于试试这个:
<Style x:Key="ButtonStyle1" TargetType="x:Type Button">
<Style.Resources>
<LinearGradientBrush x:Key="gs1" EndPoint="0.5,-0.3" StartPoint="0.5,0.8">
<GradientStop Color="Green" Offset="0.44"/>
<GradientStop Color="Black" Offset="0.727"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="gs2" EndPoint="0.5,-0.3" StartPoint="0.5,0.8">
<GradientStop Color="White" Offset="0.44"/>
<GradientStop Color="Black" Offset="0.727"/>
</LinearGradientBrush>
</Style.Resources>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type Button">
<Grid>
<Path x:Name="path1" ........... Fill="StaticResource gs1">
</Path>
<ContentPresenter .........../>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="path1" Property="Fill" Value="StaticResource gs2"></Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
它会为你工作。您也可以使用 DataBinding,在代码中声明一个 Color DependencyProperty,将其与 GradientStop 的 Color 属性绑定并随时更新。
【讨论】:
以上是关于WPF 样式:如何更改触发器中的 GradientStop 颜色的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 WPF 按钮的参数或绑定来更改 XAML 样式中的 fa 图标
通过 WPF 样式或触发器设置 TaskbarItemInfo