Стиль WPF: как изменить цвет GradientStop в триггере
У меня есть стиль кнопки:
<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>
Я хочу изменить цвет GradientStop с помощью x: Name= "gs1", когда мышь находится над кнопкой, поэтому я использую триггер IsMouseOver. Как я могу получить доступ к свойству Color в Trigger? Я попробовал TargetName= "gs1"и TargetName=" path1.gs1 " но это не работает. Есть идеи?
2 ответов
попробуйте это:
<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 и обновить его, когда захотите.
Я думаю,вам придется заменить всю кисть. вот хороший пример стайлинга кнопки.
<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>