从代码隐藏中设置 App.xaml 资源的值
本文关键字:xaml 资源 App 设置 代码 隐藏 | 更新日期: 2023-09-27 17:56:41
我为我的程序实现了一个主题系统,我在启动时从文件中读取了主题。
基本上在我的 App.xaml 中,我有一堆带有特定键的<Colors/>
,我在代码隐藏中设置了这些键的值,当我在 App.xaml.cs.Main();
中启动程序时
下面是它的样子:
public static void Main()
{
var application = new App();
application.InitializeComponent();
LoadTheme();
application.Run();
}
LoadTheme-函数看起来像这样:
public static void LoadTheme()
{
UItheme theme = UItheme.FromFile(themePath);
Color AccentColor = (Color)App.Current.FindResource("AccentColor");
Color PrimaryColor = (Color)App.Current.FindResource("PrimaryColor");
Color PrimaryLightColor = (Color)App.Current.FindResource("PrimaryLightColor");
Color PrimaryDarkColor = (Color)App.Current.FindResource("PrimaryDarkColor");
Color PrimaryTextColor = (Color)App.Current.FindResource("PrimaryTextColor");
Color SecondaryTextColor = (Color)App.Current.FindResource("SecondaryTextColor");
Color IconColor = (Color)App.Current.FindResource("IconColor");
Color BorderColor = (Color)App.Current.FindResource("BorderColor");
AccentColor = theme.AccentColor;
PrimaryColor = theme.PrimaryColor;
PrimaryLightColor = theme.PrimaryLightColor;
PrimaryDarkColor = theme.PrimaryDarkColor;
PrimaryTextColor = theme.PrimaryTextColor;
SecondaryTextColor = theme.SecondaryTextColor;
IconColor = theme.IconColor;
BorderColor = theme.BorderColor;
Console.WriteLine(((Color)App.Current.FindResource("AccentColor")).ToString());
}
也许不是最漂亮的功能,但我认为它会完成工作。
似乎是我的问题是,当我设置这些(应该是对 Color 资源的引用)时,资源本身的值似乎没有改变。就像它们是只读的一样。
最后一行始终打印出以下内容(来自 App.xaml):
<Color x:Key="AccentColor" A="255" R="123" G="123" G="123"/> // aka the values I declared the resource with in XAML.
即使我的主题有不同的颜色。
我一定在这里做错了什么,但我不知道是什么。任何帮助都会很棒。
颜色是一个结构,这意味着它是按值传递的,而不是按引用传递的。你基本上是在制作颜色的副本,修改这些副本,然后让它们超出范围并被删除。您应该通过执行类似 Application.Current.Resources["key"] = value
的操作将颜色放入资源字典中。