C# WPF-从代码更改全局样式

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="

我在ResourceDictionary文件中有以下样式

<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;