gpt4 book ai didi

WPF:在运行时从 App.xaml 更改资源(颜色)

转载 作者:行者123 更新时间:2023-12-04 01:30:05 25 4
gpt4 key购买 nike

我试图通过允许用户从颜色选择器对话框中选择颜色,然后实时更改应用程序的样式(使用 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来自先前提出的问题,并尝试过,但我得到了相同的 无效操作异常 在给定答案的评论中提到的异常 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;

最佳答案

看起来你正在尝试做某种剥皮?

我建议在包含在单独文件中的资源字典中定义资源。然后在代码中(App.cs 加载默认值,然后在其他地方进行更改),您可以这样加载资源:

//using System.Windows
ResourceDictionary dict = new ResourceDictionary();
dict.Source = new Uri("MyResourceDictionary.xaml", UriKind.Relative);

Application.Current.Resources.MergedDictionaries.Add(dict);

您还可以在 App.xaml 中定义默认资源字典并在代码中卸载它就好了。

使用 MergedDictionaries 对象更改您在运行时使用的字典。就像快速改变整个界面的魅力一样。

关于WPF:在运行时从 App.xaml 更改资源(颜色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/786183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com