C# WPF-从代码更改全局样式
我在ResourceDictionary文件中有以下样式C# WPF-从代码更改全局样式,c#,wpf,resourcedictionary,C#,Wpf,Resourcedictionary,我在ResourceDictionary文件中有以下样式 <Color x:Key="LightCyan">LightCyan</Color> <SolidColorBrush x:Key="LightCyanBrush" Color="{StaticResource LightCyan}" /> <Style x:Key="TextBoxStyle" TargetType="TextBox"> <Setter Property="
<Color x:Key="LightCyan">LightCyan</Color>
<SolidColorBrush x:Key="LightCyanBrush" Color="{StaticResource LightCyan}" />
<Style x:Key="TextBoxStyle" TargetType="TextBox">
<Setter Property="Width" Value="150" />
<Setter Property="Margin" Value="0,0,0,3" />
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource TextBoxStyle}">
<Style.Triggers>
<Trigger Property="IsReadOnly" Value="False">
<!-- Change brush color at run time -->
<Setter Property="Background" Value="{StaticResource LightCyanBrush}" />
</Trigger>
</Style.Triggers>
</Style>
LightCyan
当运行时
IsReadOnly=False
时,我需要将文本框背景颜色从颜色十六进制代码更改为颜色。最简单的方法是使用DynamicResource
而不是StaticResource
,例如:
<Window.Resources>
<SolidColorBrush x:Key="TextBoxEditableBackgroundBrush"
Color="LightCyan" />
<Style x:Key="TextBoxStyle"
TargetType="TextBox">
<Setter Property="Width"
Value="150" />
<Setter Property="Margin"
Value="0,0,0,3" />
</Style>
<Style TargetType="TextBox"
BasedOn="{StaticResource TextBoxStyle}">
<Style.Triggers>
<Trigger Property="IsReadOnly"
Value="False">
<!-- Change brush color at run time -->
<Setter Property="Background"
Value="{DynamicResource TextBoxEditableBackgroundBrush}" /> <!-- note here -->
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
var brush = new SolidColorBrush(Colors.Red);
brush.Freeze();
this.Resources["TextBoxEditableBackgroundBrush"] = brush;