我在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背景颜色。
答案 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;