我为我的程序实现了一个主题系统,我在启动时从一个文件中读取了主题。
基本上在我的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.
即使我的主题有不同的颜色。
我必须在这里做错事,但我不知道是什么。 任何帮助都会很棒。
答案 0 :(得分:1)
Color是一个结构,这意味着它是通过值传递的,而不是通过引用传递的。您基本上是复制颜色,修改这些副本,然后让它们超出范围并被删除。您应该通过()
。