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"]);
Другие вопросы по тегам