【发布时间】:2010-10-21 15:12:21
【问题描述】:
我正在尝试通过允许用户从颜色选择器对话框中选择颜色,然后实时更改应用程序的样式(使用DynamicResource)来使我的应用程序更具可定制性
如何更改位于app.xaml 中的特定资源?
我尝试过这样的事情,但没有运气(只是一个测试):
var colorDialog = new CustomControls.ColorPickerDialog();
var dResult = colorDialog.ShowDialog();
var x = Application.Current.Resources.Values.OfType<LinearGradientBrush>().First();
x = new LinearGradientBrush();
x.GradientStops.Add(new GradientStop(colorDialog.SelectedColor,1));
这是app.xaml 文件的摘录:
<Application.Resources>
<LinearGradientBrush x:Key="HeaderBackground" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#82cb02" Offset="1"/>
<GradientStop Color="#82cb01" Offset="0.2"/>
<GradientStop Color="#629a01" Offset="0.5"/>
</LinearGradientBrush>
</Application.Resources>
为应用程序提供这种形式的可定制性(基本上只是改变一些颜色)的最佳方式是什么?
[更新]
我刚刚从之前提出的问题中找到了this answer,并尝试了它,但我得到了与给定答案在 cmets 中提到的相同的 InvalidOperationException 异常 Petoj。以下是答案中的示例代码:
Xaml:
<LinearGradientBrush x:Key="MainBrush" StartPoint="0,0.5" EndPoint="1,0.5" >
<GradientBrush.GradientStops>
<GradientStop Color="Blue" Offset="0" />
<GradientStop Color="Black" Offset="1" />
</GradientBrush.GradientStops>
</LinearGradientBrush>
C#:
LinearGradientBrush myBrush = FindResource("MainBrush") as LinearGradientBrush;
myBrush.GradientStops[0].Color = Colors.Red;
【问题讨论】:
标签: wpf xaml resources customization app.xaml