我有Windows Phone应用程序,我希望根据用户是使用暗主题还是浅主题以及他们选择的强调颜色来拥有不同的主题资源。
在我的应用初始化代码中,我检测用户主题和强调颜色,然后加载相应的资源字典,黑暗,光等。我将资源字典添加到App.Current.Resources.MergedDictionaries
集合。
当我想从App.Xaml引用(动态加载)中的值时,问题就出现了。在下面的示例中,键是“DefaultBackgroundImageOpacity”。出于某种原因,当App.Xaml解析发生时,我加载到MergedDictionaries集合中的ResourceDictionary中的值永远不会被找到。我在调用InitializeComponent()之后加载资源。似乎都没有解决这个问题。
有什么想法吗?
// Simplified version of adding some xaml...
// Note I'm loading the key "DefaultBackgroundImageOpacity"
this.Resources.MergedDictionaries.Clear();
var myTestXaml = "<ResourceDictionary xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' xmlns:System='clr-namespace:System;assembly=mscorlib'> <System:Double x:Key='DefaultBackgroundImageOpacity'>0.2</System:Double></ResourceDictionary>";
this.Resources.MergedDictionaries.Add((ResourceDictionary)XamlReader.Load(myTestXaml));
// This always fails saying that the key "DefaultBackgroundImageOpacity"
// can not be foudnd - even though it was loaded just above
InitializeComponent();
// Phone-specific initialization
InitializePhoneApplication();
答案 0 :(得分:-1)
我怀疑你的App.Xaml包含这样的内容: -
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/somedictionary.xaml" />
...
</ResourceDictionary.MergedDictionaries>
...
</ResourceDictionary>
</Application.Resources>
如果是这样,那么InitializeComponent
将替换您在代码中操作的默认ResourceDictionary
,因此MergeDictionaries
的更改将不会出现,因为{{1}的实例不再引用。
如果您未在App.Xaml中设置任何ResourceDictionary
,请确保直接向MergedDictionaries
添加资源,而不是在xaml中创建Applicaiton.Resources
的新实例。