【发布时间】:2019-02-26 21:13:35
【问题描述】:
我有一个问题在这里被问到,但给出的解决方案没有帮助。
我想通过 App 全局资源从另一个窗口更改 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 };
【问题讨论】:
-
将网格的背景绑定到视图模型属性。
-
绑定也不起作用。绑定的背景颜色始终为 null,如果画笔更改则不会更改
-
@Clemens 同样,如果我将 DynamicResource 更改为 StaticResource,颜色仍将保持透明
-
我的意思是带有更改通知的 Brush 类型的视图模型属性,例如INotifyPropertyChanged 接口的 PropertyChanged 事件。像
Background="{Binding MyBackgroundBrush}"一样绑定它。 -
我进行了更改,所以现在 DynamicResource 内部工作,但屏幕上没有任何变化 :^( 新代码:
<Window.Resources> <SolidColorBrush x:Key="backBrush" Color="White"/> </Window.Resources><Grid Name="MainGrid" Background="{DynamicResource backBrush}">并且回码看起来像((SolidColorBrush)Resources["backBrush"]).Color = (Color)Application.Current.Resources["backColor"];
标签: c# wpf dynamicresource