WPF Global样式,在运行时更改而不设置DynamicResource

时间:2014-08-19 08:56:30

标签: c# wpf runtime

有没有办法设置一个更新目标控件的全局样式'更改样式,而不为每个控件分配动态资源?

包含样式定义的应用资源

<Style x:Key="ThemableLabel" TargetType="{x:Type Label}"
    <Setter Property="Foreground" Value="White"/>
</Style>

然后在运行时更改样式

Style style = new Style {
    TargetType = typeof( Label )
};

style.Setters.Add( new Setter( Label.ForegroundProperty, brush ) );
Application.Current.Resources[ "ThemableLabel" ] = style;

要求所有标签都已将动态资源集分配给ThemableLabel。

2 个答案:

答案 0 :(得分:2)

EDIT
试试这个

    <App.Resources>
           <SolidColorBrush Color="CadetBlue" x:Key="Color"/>
    </App.Resources>
        <Style x:Key="ThemableLabel" TargetType="{x:Type Label}"
            <Setter Property="Foreground" Value="{DynamicResource Color}"/>
        </Style>

并更改代码属性SolidColorBrush的颜色。

Resources["Color"] = new SolidColorBrush(Colors.Red);

更改将反映在分配了此样式的任何对象中。如果使用StaticResource,则不会发生任何更改。现在没有必要创建仅应用一个不同属性值的全新样式。

答案 1 :(得分:-1)

您必须在所有标签控件中将'style'xmal标记设置为DynamicResource:

 <Label Style="{DynamicResource ThemableLabel}"/>