我有这种风格
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="MainMenuStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property= "Foreground" Value="White"/>
<Setter Property= "FontSize" Value="22"/>
<Setter Property= "FontFamily" Value="Arial"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property= "Foreground" Value="Black" />
<Setter Property= "FontSize" Value="14"/>
<Setter Property= "FontFamily" Value="Verdana"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
现在,如果我想从代码中更改Setter属性值,我该怎么办呢?
在代码背后,我想要这样的东西:
MainMenuStyle.IsMouseOver(True).Foreground = "Red"
MainMenuStyle.IsMouseOver(True).FontSize = 10
MainMenuStyle.IsMouseOver(False).Foreground = "Green"
MainMenuStyle.IsMouseOver(False).FontSize = 100
Run Code Online (Sandbox Code Playgroud)
我必须只使用框架4.
谢谢
Giangregorio 已经涵盖了无法直接实现这一点的大部分原因。不过,这里有一个解决方案:
您可以DynamicResource在样式中使用引用Setters,然后当您需要更改样式时,只需更新资源即可,而不是样式。通过一个例子可能会更有意义:
<!-- Colour Resources -->
<SolidColorBrush x:Key="BlueBrush" Color="Blue"/>
<SolidColorBrush x:Key="RedBrush" Color="Red"/>
<!-- TextBlock Style (References the colour resources) -->
<Style x:Key="MainMenuStyle" TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property= "Foreground" Value="{DynamicResource BlueBrush}"/>
...
</Trigger>
<Trigger Property="IsMouseOver" Value="False">
<Setter Property= "Foreground" Value="{DynamicResource RedBrush}" />
...
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
所以。由于Foreground属性引用 a DynamicResource,每当资源更改时,它都会更新Style. 您需要在代码中做的就是更改资源值。
App.Current.Resources["BlueBrush"] = new SolidColorBrush(Colors.Pink);
Run Code Online (Sandbox Code Playgroud)
其余的将由他们DynamicResource处理。
| 归档时间: |
|
| 查看次数: |
1885 次 |
| 最近记录: |