WPF DynamicResource ничего не обновляет - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть проблема, которая была задана здесь, но данные решения не помогли.Я хочу изменить цвет фона 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>

Неисправная часть главного окна:

<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 Ответ

0 голосов
/ 27 февраля 2019

Вы забыли установить альфа-значение цвета, которое по умолчанию равно нулю:

<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"]);
...