如何在运行时更改资源字典颜色

在XAML中:

 Red Black      

在C#中:

  public void CreateTestRect() { Rectangle exampleRectangle = new Rectangle(); exampleRectangle.Width = 150; exampleRectangle.Height = 150; exampleRectangle.StrokeThickness = 4; exampleRectangle.Margin = new Thickness(350); ResourceDictionary resources = this.Resources; resources["BrushColor1"] = Colors.Pink; resources["BrushColor2"] = Colors.RoyalBlue; Brush brush =(Brush)this.FindResource("GradientBrush1"); exampleRectangle.Fill = brush; canvas.Children.Insert(0, exampleRectangle); } 

如何在C#中更改运行时中的那些Color元素。 LinearGradientBrush应该动态更改?

我希望做这样的事情:

 (Color)(this.FindResource("BrushColor1")) = Colors.Pink; 

但我失败了。

您可以直接覆盖资源字典中的值。

例如:

 ResourceDictionary resources = this.Resources; // If in a Window/UserControl/etc resources["BrushColor1"] = System.Windows.Media.Colors.Black; 

话虽如此,我通常建议不要这样做。 相反,我会有两组颜色,每组都有自己的键,并使用一些机制来切换在运行时为您的值分配哪种颜色。 这使您可以在xaml本身中保留整个逻辑。

我刚刚解决了 看起来只有LinearGradientBrush不支持DynamicResource颜色。 即使你覆盖动态颜色, LinearGradientBrush本身也不会更新。 PS: SolidColorBrush支持运行时颜色更改。 请改为:

 LinearGradientBrush linearGradientBrush = (LinearGradientBrush)(this.FindResource("GradientBrush1")); linearGradientBrush.GradientStops[0].Color = color1; linearGradientBrush.GradientStops[1].Color = color2; 

如果LinearGradientBrush隐藏在资源字典中定义的嵌套复杂画笔中,则会使LinearGradientBrush出现,并为其指定一个键。