WPF在触发器中设置边框背景

时间:2010-10-19 04:53:18

标签: wpf background triggers

我需要创建一个触发器,当MouseEnter发生时,它将更改Border背景属性。我做了以下事情:

<Border Width="20" Height="30" Focusable="True">
        <Border.Background>
            <LinearGradientBrush>
                <LinearGradientBrush.GradientStops>
                    <GradientStop Color="Aquamarine" Offset="0"/>
                </LinearGradientBrush.GradientStops>
            </LinearGradientBrush>
        </Border.Background>
        <Border.Style>
            <Style TargetType="{x:Type Border}">
                <Style.Triggers>

                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background">
                            <Setter.Value>
                                <LinearGradientBrush>
                                    <LinearGradientBrush.GradientStops>
                                        <GradientStop Color="Aquamarine" Offset="0"/>
                                        <GradientStop Color="Beige" Offset="0.2"/>
                                        <GradientStop Color="Firebrick" Offset="0.5"/>
                                        <GradientStop Color="DarkMagenta" Offset="0.9"/>
                                    </LinearGradientBrush.GradientStops>
                                </LinearGradientBrush>
                            </Setter.Value>
                        </Setter>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
    </Border>

但它不起作用。感谢。

1 个答案:

答案 0 :(得分:32)

常见错误。您已直接设置Border.Background属性,该属性将始终覆盖触发器设置的值。 (在本地设置值have a very high precedence,样式的优先级非常低。)

相反,您应该将“正常”背景移动到样式中,如下所示:

<Border>
    <Border.Style>
        <Style TargetType="Border">
            <Setter Property="Background">
                <Setter.Value>
                    <LinearGradientBrush>
                        <LinearGradientBrush.GradientStops>
                            <GradientStop Color="Aquamarine" Offset="0"/>
                        </LinearGradientBrush.GradientStops>
                    </LinearGradientBrush>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <!-- the trigger you showed -->
            </Style.Triggers>
        </Style>
    </Border.Style>
</Border>