WPF DynamicResource ничего не обновляет
У меня есть проблема, которая была задана здесь, но данные решения не помогли. Я хочу изменить цвет фона 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 };
1 ответ
Вы забыли установить альфа-значение цвета, которое по умолчанию равно нулю:
<Application.Resources>
<Color x:Key="backColor" R="255" G="0" B="255" A="255"/>
</Application.Resources>
Теперь вы просто измените динамический ресурс Brush с помощью
Resources["backBrush"] = new SolidColorBrush(
(Color)Application.Current.Resources["backColor"]);