我已宣布以下风格。如何在我的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>
答案 0 :(得分: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>