我正在尝试通过允许用户从“颜色选择器对话框”中选择颜色,并使用 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>
如何才能让应用程序具备这种形式的可定制性(基本上只是改变一些颜色)?
[更新]
我刚刚在之前的一个问题中找到了这个答案,并尝试了它,但我得到了与Petoj评论所提到的答案相同的InvalidOperationException异常。以下是答案中的示例代码:
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;