从代码隐藏中设置 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.

即使我的主题有不同的颜色。

我一定在这里做错了什么,但我不知道是什么。任何帮助都会很棒。

从代码隐藏中设置 App.xaml 资源的值

颜色是一个结构,这意味着它是按值传递的,而不是按引用传递的。你基本上是在制作颜色的副本,修改这些副本,然后让它们超出范围并被删除。您应该通过执行类似 Application.Current.Resources["key"] = value 的操作将颜色放入资源字典中。