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. В противном случае просто переопределите одну из стандартных кистей темы и используйте ее вместо этого.