Windows Phone 8, ThemeManager и тематические ресурсы

Я пытаюсь использовать ThemeManager в моем WP 8, чтобы изменить стиль по умолчанию. У меня есть один файл ресурсов, который содержит мои настройки цвета и т. Д.

My 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, в моем конструкторе приложений я использую 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 Designer корректно отображает цвет.

В чем может быть проблема там?

Изменить: И да, действие по сборке файла ThemeResources.xml установлено на "Ресурс". Все та же проблема.

1 ответ

Решение

Прочитайте из readme ThemeManager ( https://github.com/jeffwilcox/wp-thememanager):

"ПРИМЕЧАНИЕ. Не помещайте в измененный файл ThemeResources.xaml ничего, что вам понадобится позже (если поместить его в раздел MergedDictionary), так как частью процесса является удаление MergedDictionary после установки темы. По какой-то причине, если вы не PhoneForegroundBrush не остается установленным."

Я еще не пробовал себя, но я полагаю, что если вы хотите сохранить свой TestBrush, то вам нужно определить его в отдельном файле XAML. В противном случае просто переопределите одну из стандартных кистей темы и используйте ее вместо этого.

Другие вопросы по тегам