如何在运行时更改资源字典颜色
在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出现,并为其指定一个键。