【问题标题】:WPF DynamicResource does not update anythingWPF DynamicResource 不更新任何内容
【发布时间】:2019-02-26 21:13:35
【问题描述】:

我有一个问题在这里被问到,但给出的解决方案没有帮助。 我想通过 App 全局资源从另一个窗口更改 MainWindow 的 Grid 的背景颜色。问题是,比我动态更改backBrush,没有任何反应。而且颜色最初是透明的。我尝试了设置资源价值的不同方法,例如Application.Current.Resources["key"] = new_valueMainGrid.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 内部工作,但屏幕上没有任何变化 :^( 新代码:&lt;Window.Resources&gt; &lt;SolidColorBrush x:Key="backBrush" Color="White"/&gt; &lt;/Window.Resources&gt; &lt;Grid Name="MainGrid" Background="{DynamicResource backBrush}"&gt; 并且回码看起来像 ((SolidColorBrush)Resources["backBrush"]).Color = (Color)Application.Current.Resources["backColor"];

标签: c# wpf dynamicresource


【解决方案1】:

您忘记设置颜色的 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"]);

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 2020-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    相关资源
    最近更新 更多