1

我已经声明了以下样式。如何在我的 vb.net 中动态覆盖样式前景色?

<Style x:Key="LabelWinner" TargetType="{x:Type Label}">
        <Setter Property="Effect">
            <Setter.Value>
                <DropShadowEffect Color="#FF000000" ShadowDepth="6" />
            </Setter.Value>
        </Setter>
        <Setter Property="Foreground" Value="#FFFF0000"/>
    </Style>
4

1 回答 1

1

正如评论中提到的@nit,在 WPF 中具有强大的系统行为属性形式Style.Triggers

早些时候,WinForms要更改特定属性,我们必须通过不太舒适和实用的代码来完成。WPF 的开发人员决定将与程序外观相关的可视化逻辑与包含程序所需行为的业务逻辑分开。实际上,它是一个Style.

要设置Style触发器,您需要选择适当的属性。触发器如下:

<Trigger Property="SomeProperty" Value="SomeValue">

... Some actions by way of setters...

</Trigger>

例如,我们希望看到,当您将鼠标悬停在鼠标光标上时,Foreground颜色会发生变化FontSize。然后我们选择属性IsMouseOver,然后写一个Trigger

<Style x:Key="LabelWinner" TargetType="{x:Type Label}">
    <Setter Property="Effect">
        <Setter.Value>
            <DropShadowEffect Color="#FF000000" ShadowDepth="6" />
        </Setter.Value>
    </Setter>

    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Foreground" Value="Green" />
            <Setter Property="FontSize" Value="14" />
        </Trigger>
    </Style.Triggers>
</Style>

应该记住,在 WPF 中有一个值优先级列表 ( MSDN),即本地值的优先级高于触发器样式。因此,如果Label将属性的值设置为本地,触发器将无法更改它,例如:

<Label Foreground="Red" ... /> <!-- Trigger don't change foreground -->

如果缺少标准属性,或者需要实现您的场景,则它具有附加的依赖属性 ( MSDN)。在其中,您可以设置任何条件,例如启动动画和触发器的样式。

附加依赖属性的触发器示例:

<Trigger Property="local:YourClass.MyProperty" Value="True">
    <Setter TargetName="SaveButton" Property="Background" Value="AliceBlue" />
</Trigger>
于 2013-08-31T09:09:09.307 回答