2015-06-16 15 views
0

我爲我的程序實現了一個主題系統,並且我在啓動時從文件中讀取了主題。從代碼隱藏設置App.xaml-resources的值

基本上在我的App.xaml我有我在App.xaml.cs.Main();

這裏啓動程序時設置的值在代碼隱藏特定按鍵一堆<Colors/>是它看起來像:

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()); 

} 

也許不是最漂亮的功能,但我認爲它會得到第j完成了。

什麼似乎是我的問題是,當我設置這些(應該是對顏色資源的引用)時,資源本身的值似乎沒有改變。就像他們只是只讀一樣。

最後一行總是打印出以下(從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

Color是一個結構,這意味着它是通過值,而不是通過引用。你基本上正在製作顏色的副本,修改這些副本,然後讓它們超出範圍並被刪除。你應該沿着Application.Current.Resources["key"] = value的方向進行操作,將顏色放入資源字典中。

+0

哇。我沒有看到Color是一個結構體。好的,謝謝。 – Tokfrans