简而言之,我的问题是:如何在WP7.1应用程序中切换ResourceDictionaries?有没有比我想做的更简单的方法?
详细...
在Windows Phone 7项目中,我需要根据用户的主题(亮/暗)替换应用程序资源。简而言之,这个想法很明显:
a)创建一个ResourceDictionary变量
b)根据当前主题获取适当的样式和刷子资源文件
c)将上述资源添加到Application.Current.Resources.MergedDictionaries
这就是我在做的事情:
1)“查看”项目中资源的文件夹结构:
资源
黑暗
Brushes.xaml
Styles.xaml
光
Brushes.xaml
Styles.xaml
2)2个Brushes.xaml文件中的样式具有相同的键。与Styles.xaml相同。
3)在我的第一次尝试中(假设选择了轻量级主题)我在第二行得到“未指明的错误”。
var uriPath = "Resources/Light/Brushes.xaml";
var brushes = new ResourceDictionary {Source = new Uri(uriPath, UriKind.Relative)};
dic.MergedDictionaries.Add(brushes);
(仅供参考我尝试使用资源,页面和内容构建操作)
4)我的第二次尝试给了我希望,因为我成功地将Brushes.xaml填充到App的MergedDictionaries中:
string xaml;
var uriPath = "Resources/Light/Brushes.xaml";
var brushesUri = new Uri(uriPath, UriKind.Relative);
var brushesStream = Application.GetResourceStream(brushesUri);
using (var brushesStreamReader = new StreamReader(brushesStream.Stream))
xaml = brushesStreamReader.ReadToEnd();
var dic = new ResourceDictionary();
dic.MergedDictionaries.Add((ResourceDictionary)XamlReader.Load(xaml));
5)为了使brushStreamReader在上面的代码中不是null
,我必须将xaml文件设置为“Content”。 (为什么?)
6)第4步中我的代码的第二个问题是尝试使用Styles.xaml做同样的事情。我在最后一行得到了一个“Failed to assign to property 'System.Windows.ResourceDictionary.Source'
”(dic.MergedDictionaries.Add ...)。也许这是因为Styles.xaml将Brushes.xaml添加到它自己的MergedDictionaries:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Brushes.xaml"/>
</ResourceDictionary.MergedDictionaries>
是吗?
答案 0 :(得分:0)
在这种情况下,您可以抓住主题画笔并进行分析。例如:
private Color lightThemeBackground = Color.FromArgb(255, 255, 255, 255);
private Color darkThemeBackground = Color.FromArgb(255, 0, 0, 0);
public bool IsLightTheme()
{
SolidColorBrush backgroundBrush = Application.Current.Resources["PhoneBackgroundBrush"] as SolidColorBrush;
if (backgroundBrush.Color == lightThemeBackground) {
// you are in the light theme
return true;
}
else {
// you are in the dark theme
return false;
}
}
答案 1 :(得分:-1)
你不应该这样做。只需使用系统画笔即可获得所有主题颜色。 以下是这些画笔的概述:http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff769552.aspx#BKMK_BrushResources