设置App.xaml-resources'代码隐藏的价值

时间:2015-06-16 19:31:48

标签: c# wpf xaml

我为我的程序实现了一个主题系统,我在启动时从一个文件中读取了主题。

基本上在我的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-resource的引用)时,资源本身的值似乎没有改变。 就像他们只是阅读一样。

最后一行总是打印出以下内容(来自App.xaml):

<Color x:Key="AccentColor" A="255" R="123" G="123" G="123"/> // aka the values I declared the resource with in XAML.

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

我必须在这里做错事,但我不知道是什么。 任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

Color是一个结构,这意味着它是通过值传递的,而不是通过引用传递的。您基本上是复制颜色,修改这些副本,然后让它们超出范围并被删除。您应该通过()

的行来将颜色放入资源字典中