有没有办法设置一个更新目标控件的全局样式'更改样式,而不为每个控件分配动态资源?
包含样式定义的应用资源
<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。
答案 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}"/>