我试图通过允许用户从颜色选择器对话框中选择一种颜色来使我的应用程序更具可定制性,然后实时更改应用程序的样式(使用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>
允许这种形式的可定制性(基本上只是更改一些颜色)到应用程序的最佳方式是什么?
[更新]
我刚刚从之前提出的问题中找到了这个答案,并尝试了它,但我得到了与给定答案的评论中提到的相同的InvalidOperationException异常 Petoj。以下是答案中的示例代码:
xml :
<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;