WP7项目中的主题感知XAML资源

WP7项目中的主题感知XAML资源,xaml,windows-phone-7,Xaml,Windows Phone 7,我正在制作一个WindowsPhone7应用程序,我对黑暗/光明的主题有点困惑 使用全景图时,通常会设置背景图像。问题是很难制作出既适合黑暗主题又适合光明主题的图片。我们应该如何进行 有没有一种方法可以强制为全景画设置暗/光主题?这将避免制作特定主题的全景背景图片。那我该怎么办?我在C:\ProgramFiles(x86)\Microsoft SDK\Windows Phone\v7.0\Design中找到了xaml文件。如果这是一种正确的方法,如何将它们导入全景 或者如果没有办法(或者是错误的

我正在制作一个WindowsPhone7应用程序,我对黑暗/光明的主题有点困惑

使用全景图时,通常会设置背景图像。问题是很难制作出既适合黑暗主题又适合光明主题的图片。我们应该如何进行

有没有一种方法可以强制为全景画设置暗/光主题?这将避免制作特定主题的全景背景图片。那我该怎么办?我在
C:\ProgramFiles(x86)\Microsoft SDK\Windows Phone\v7.0\Design
中找到了xaml文件。如果这是一种正确的方法,如何将它们导入全景

或者如果没有办法(或者是错误的)强制使用暗/亮主题:如何编写条件XAML来设置正确的资源?现在,我有了以下XAML(default.XAML),它可以与黑暗主题配合使用:

<ImageBrush x:Key="PageBackground" ImageSource="Resources/PageBackground.png" Stretch="None" />
<ImageBrush x:Key="PanoramaBackground" ImageSource="Resources/PanoramaBackground.png" Stretch="None" />

要强制使用黑色或白色主题,您确实可以使用您指出的文件夹中定义的样式。将所需规则复制并粘贴到App.xaml(只需PhoneForegroundColor、PhoneBackgroundColor和相关画笔即可)


不过,最好保持“主题意识”,为明暗主题加载不同的图像。这里有一篇文章解释了如何做到这一点:

我发现了另一种可能性:您可以根据需要使用转换器。但是,我无法正确使用它们

另一种可能是使用。但这仅适用于黑白图像:/


优素福的解决方案看起来很有趣。但加载需要太多时间。该图像将在应用程序启动后约1s左右更改。我已经在诺基亚820上测试过了。我已经移动了在已加载事件中设置DataContext的调用,该事件在很久以后调用。现在调用发生在构造函数中,因此当应用程序显示图像时,图像已经设置好了。但是,它仍然增加了更多的加载时间:(有没有关于如何改进的建议?

非常相关的答案和文章。但是我认为ViewModel没有责任处理这个视图问题。如果找不到XAML方法,这是一个很好的解决方法。我不认为有纯XAML方法(没有条件XAML)。其他选项是编写一个自定义ValueConverter来选择正确的背景,或者编写一个ContentControl,根据主题从两个数据模板中选择一个。确定。接下来,我创建了一个light.xaml文件(构建操作:内容,复制:不复制)。如果用户使用的是轻主题,则此文件包含我要覆盖的资源。在App.xaml.cs中,在
InitializePhoneApplication()之后;
如果light主题测试通过,我会动态加载light.xaml。这不是一种完整的xaml方式,但只涉及5行代码。再加上这个答案:即使在将主题复制/粘贴到App.xaml代码中之后,您仍然必须显式地将资源绑定到页面的根元素,然后才能找到正确的资源e已加载。+1谢谢,关于主题感知背景图像的示例正是我要搜索的!
<ImageBrush x:Key="PageBackground" ImageSource="Resources/PageBackgroundLight.png" Stretch="None" />
<ImageBrush x:Key="PanoramaBackground" ImageSource="Resources/PanoramaBackgroundLight.png" Stretch="None" />
string xaml = null;
StreamResourceInfo xamlInfo = Application.GetResourceStream(new Uri("light.xaml", UriKind.Relative));
using (StreamReader sr = new StreamReader(xamlInfo.Stream))
    xaml = sr.ReadToEnd();
dic = (ResourceDictionary)XamlReader.Load(xaml);
this.Resources.MergedDictionaries.Add(dic);