如何在触发器中更改Property =“Style”

时间:2014-09-29 18:23:38

标签: wpf staticresource wpf-style

触发器不起作用。 IsMouseOver没有改变Button的风格。我不确定我的代码有什么问题。我试图在鼠标悬停属性上更改按钮的样式属性。它不断抛出错误。

基本上我试图在鼠标悬停事件上使用不同的风格

 <Style x:Key="FancyButtonStyle" TargetType="{x:Type Button}">
                    <Setter Property="FontSize" Value="{Binding FontSize}"/>
                    <Setter Property="Foreground" Value="{Binding Foreground}"/>
                    <Setter Property="FontWeight" Value="{Binding FontWeight}"/>
                    <Setter Property="Width" Value="{Binding Width}"/>
                    <Setter Property="Height" Value="{Binding Height}"/>
                    <Setter Property="Background">
                        <Setter.Value>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                <GradientStop Offset="0.0" Color="White" />
                                <GradientStop Offset="0.2" Color="DarkGray" />
                                <GradientStop Offset="0.6" Color="Black" />
                            </LinearGradientBrush>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Style" Value="{StaticResource ResourceKey=FancyButtonInvertStyle}"/>
                         </Trigger>
                    </Style.Triggers>
                </Style>

                <Style x:Key="FancyButtonInvertStyle" TargetType="{x:Type Button}">
                    <Setter Property="FontSize" Value="{Binding FontSize}"/>
                    <Setter Property="Foreground" Value="{Binding Foreground}"/>
                    <Setter Property="FontWeight" Value="{Binding FontWeight}"/>
                    <Setter Property="Width" Value="{Binding Width}"/>
                    <Setter Property="Height" Value="{Binding Height}"/>
                    <Setter Property="Background">
                        <Setter.Value>
                            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                <GradientStop Offset="0.0" Color="Black" />
                                <GradientStop Offset="0.4" Color="DarkGray" />
                                <GradientStop Offset="0.6" Color="White" />
                            </LinearGradientBrush>
                        </Setter.Value>
                    </Setter>
                </Style>

1 个答案:

答案 0 :(得分:0)

不要尝试更改Style中的Trigger,而是直接在其中更改Background。让您不再重复Style

<Style x:Key="FancyButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="FontSize" Value="{Binding FontSize}"/>
    <Setter Property="Foreground" Value="{Binding Foreground}"/>
    <Setter Property="FontWeight" Value="{Binding FontWeight}"/>
    <Setter Property="Width" Value="{Binding Width}"/>
    <Setter Property="Height" Value="{Binding Height}"/>
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Offset="0.0" Color="White" />
                <GradientStop Offset="0.2" Color="DarkGray" />
                <GradientStop Offset="0.6" Color="Black" />
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                    <GradientStop Offset="0.0" Color="Black" />
                    <GradientStop Offset="0.4" Color="DarkGray" />
                    <GradientStop Offset="0.6" Color="White" />
                </LinearGradientBrush>
            </Setter.Value>
            </Setter>
         </Trigger>
    </Style.Triggers>
</Style>

我不确定您是否可以按照预期的方式更改Style中的Trigger,因为它不是通过目标中的Setter标记设置的控制自己。