WPF DynamicResource 不更新任何东西
WPF DynamicResource does not update anything
我在这里提出了一个问题,但给出的解决方案没有帮助。
我想通过 App 全局资源从另一个 window 更改 MainWindow Grid
的背景颜色。问题是,当我动态更改 backBrush
时,什么也没有发生。而且颜色最初是透明的。我尝试了不同的方法来设置资源的价值,比如 Application.Current.Resources["key"] = new_value
和
MainGrid.SetResourceReference(Grid.BackgroundProperty, "key")
但没有任何帮助。
我做错了什么?
应用程序资源如下所示:
<Application.Resources>
<Color x:Key="backColor" R="255" G="0" B="255"/>
</Application.Resources>
MainWindow有问题的部分:
<Window.Resources>
<SolidColorBrush x:Key="backBrush" Color="{DynamicResource backColor}"/>
</Window.Resources>
<Grid
Name="MainGrid"
Background="{DynamicResource backBrush}">
代码,对应颜色变化:
this.Resources.Remove("backBrush");
this.Resources.Add("backBrush",
new SolidColorBrush { Color =
(Color)Application.Current.Resources["backColor"] });
MainGrid.SetResourceReference(Grid.BackgroundProperty, "backBrush");
我也试过这样设置颜色:
Color newColor = (Color)Application.Current.Resources["backColor"];
Application.Current.Resources["backBrush"] = new SolidColorBrush { Color = newColor };
您忘记设置颜色的 alpha 值,默认为零:
<Application.Resources>
<Color x:Key="backColor" R="255" G="0" B="255" A="255"/>
</Application.Resources>
现在您只需将动态画笔资源更改为
Resources["backBrush"] = new SolidColorBrush(
(Color)Application.Current.Resources["backColor"]);
我在这里提出了一个问题,但给出的解决方案没有帮助。
我想通过 App 全局资源从另一个 window 更改 MainWindow Grid
的背景颜色。问题是,当我动态更改 backBrush
时,什么也没有发生。而且颜色最初是透明的。我尝试了不同的方法来设置资源的价值,比如 Application.Current.Resources["key"] = new_value
和
MainGrid.SetResourceReference(Grid.BackgroundProperty, "key")
但没有任何帮助。
我做错了什么?
应用程序资源如下所示:
<Application.Resources>
<Color x:Key="backColor" R="255" G="0" B="255"/>
</Application.Resources>
MainWindow有问题的部分:
<Window.Resources>
<SolidColorBrush x:Key="backBrush" Color="{DynamicResource backColor}"/>
</Window.Resources>
<Grid
Name="MainGrid"
Background="{DynamicResource backBrush}">
代码,对应颜色变化:
this.Resources.Remove("backBrush");
this.Resources.Add("backBrush",
new SolidColorBrush { Color =
(Color)Application.Current.Resources["backColor"] });
MainGrid.SetResourceReference(Grid.BackgroundProperty, "backBrush");
我也试过这样设置颜色:
Color newColor = (Color)Application.Current.Resources["backColor"];
Application.Current.Resources["backBrush"] = new SolidColorBrush { Color = newColor };
您忘记设置颜色的 alpha 值,默认为零:
<Application.Resources>
<Color x:Key="backColor" R="255" G="0" B="255" A="255"/>
</Application.Resources>
现在您只需将动态画笔资源更改为
Resources["backBrush"] = new SolidColorBrush(
(Color)Application.Current.Resources["backColor"]);