WPF - 保留触发器如果设置了相应的属性

时间:2017-05-17 13:24:24

标签: wpf xaml

如果相应的属性设置在Trigger之外,是否可以将Style保留在Style内?

第二个Button工作正常,但Trigger不适用于第一个Button

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <Trigger Property="IsMouseOver"
                         Value="True">
                    <Setter Property="Foreground"
                            Value="GreenYellow" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Resources>
    <Button Foreground="Orange">The First Button</Button>
    <Button>The Second Button</Button>
</StackPanel>

2 个答案:

答案 0 :(得分:1)

这不起作用的原因是本地依赖项属性值优先于setter设置的属性值:https://msdn.microsoft.com/en-us/library/ms743230(v=vs.110).aspx

所以不,不能在Setter中使用Style来设置已设置为本地值的属性:

<Button Foreground="Orange">The First Button</Button>

答案 1 :(得分:1)

您必须在Style

中声明默认值
<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Foreground" Value="Orange"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Foreground" Value="GreenYellow" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Resources>
    <Button>The First Button</Button>
    <Button>The Second Button</Button>
</StackPanel>

查看https://msdn.microsoft.com/en-us/library/ms743230.aspx

上的依赖项属性设置优先级列表

如果你想让它变得动态。您必须使用额外的CustomButton编写自己的DependencyProperty并为其编写自己的Style