WPF - 从代码中更改全局样式

时间:2017-04-09 12:12:35

标签: c# wpf resourcedictionary

我在ResourceDictionary文件中有以下样式

ReadProcessMemory(handle, LPVOID(base + offset1), some_buffer, some_buffer_size, 0);

我需要在运行时从颜色十六进制代码更改<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> 时的TextBox背景颜色。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用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;