Windows Phone 8,ThemeManager和主题资源

时间:2013-09-11 16:27:05

标签: c# wpf windows-phone-8 themes resourcedictionary

我试图在WP 8中使用ThemeManager来改变一些默认样式。我有一个资源文件,其中包含我的颜色等自定义。

我的ThemeResources.xml

<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">
    <Color x:Key="TestColor">#FF2c5f8c</Color>
    <SolidColorBrush x:Key="TestBrush" Color="{StaticResource TestColor}"/>
</ResourceDictionary>

现在在我的App.xml中将其设置为合并字典:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
         <ResourceDictionary Source="Themes/ThemeResources.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <local:LocalizedStrings xmlns:local="clr-namespace:MyApp" x:Key="LocalizedStrings"/>
    </ResourceDictionary>
</Application.Resources>

在我的App.cs中,在我的app构造函数中,我使用了themeManager:

public App()
{
    // Global handler for uncaught exceptions.
    UnhandledException += Application_UnhandledException;

    // Standard XAML initialization
    InitializeComponent();

    // Phone-specific initialization
    InitializePhoneApplication();

    // Language display initialization
    InitializeLanguage();

    // Get the custom theme
    var rd = App.Current.Resources.MergedDictionaries[0];

    // Set custom Theme, fallback to dark
    ThemeManager.SetCustomTheme(rd, Theme.Light);
    ...

最后,在我的MainPage.xml中,我使用这个TestBrush,在ThemeResources.xml中定义如下:

<TextBlock Text="Testing" Foreground="{StaticResource TestBrush}"/>

对我来说一切看起来都是正确的,但是当我尝试运行应用程序时,我得到以下异常:

$ exception {System.Windows.Markup.XamlParseException:无法找到名称/密钥TestBrush的资源[行:90位置:175]

在Visual Studio设计器中,它显示颜色正确。

那里可能出现什么问题?

编辑: 是的,ThemeResources.xml文件的构建操作设置为“资源”。仍然是同一个问题。

1 个答案:

答案 0 :(得分:1)

从ThemeManager自述文件(https://github.com/jeffwilcox/wp-thememanager)中读取:

“注意:不要在修改后的ThemeResources.xaml中添加以后需要的其他内容(如果将其放在MergedDictionary部分中)作为该过程的一部分,一旦删除MergedDictionary主题已设置。出于某种原因,如果你没有,PhoneForegroundBrush不会保持设置。“

我还没有尝试过,但我想如果你想保留你的TestBrush,那么你需要在一个单独的XAML文件中定义它。 否则,只需重新定义一个标准主题画笔并使用它。