Пользовательская тема, которая переопределяет тему по умолчанию WP7 - PullRequest
5 голосов
/ 14 апреля 2011

Можно ли создать собственную тему и использовать ее в качестве темы по умолчанию?

Каждый пример, который я могу найти где угодно, говорит о том, что вы можете создавать собственные темы, копируя файлы ThemeResources.xaml и System.Windows.xaml ивключая их как объединенные словари в вашем приложении.

http://windowsphonegeek.com/articles/Creating-WP7-Custom-Theme-ndash-Basic-Theme-Implementation Переопределение тем в Windows Phone 7

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources/CustomThemeResources.xaml" />
            <ResourceDictionary Source="Resources/CustomThemeStyles.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Затем я прочитал еще нескольковам нужно включить кисти в файл стилей, поэтому в CustomThemeStyles.xaml у меня есть это.

http://www.windowsphonegeek.com/articles/Creating-WP7-Custom-Theme---Complex-Theme

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="CustomThemeResources.xaml" />
</ResourceDictionary.MergedDictionaries>

Это не работает ... поэтому я загружаюПример приложения и, конечно же, каждая страница, для которой требуется изменить какой-либо цвет, например, цвет фона, установит его на самом внешнем компоненте.

<Grid Background="{StaticResource PhoneBackgroundBrush}">
...
</Grid>

Можно ли включать пользовательские темы, которые изменяют стиль/ brushes / colors / etc со всеми значениями по умолчанию без явной установки их везде?

Ответы [ 3 ]

4 голосов
/ 14 апреля 2011

В текущей версии WP7 невозможно иметь новый стиль, который меняет стиль по умолчанию без явной установки его через «x: Key»:

Неявные стили - это функция Silverlight 4 (и WPF): Windows Phone 7 основан на Silverlight 3+ (добавлено несколько функций Silverlight 4). Поскольку в Silverlight 3 неявные стили отсутствуют, это означает, что их нельзя использовать и в Windows Phone 7.

На данный момент вы можете:

  1. Переопределяет только ресурсы кисти / цвета по умолчанию, как описано в первой статье, которую вы указали. Обратите внимание, что все элементы управления WP7 изменят свои цвета. Обратите внимание, что по какой-то причине фон по умолчанию остается неизменным Это известная проблема в текущей версии WP7, которая, вероятно, будет исправлена ​​в обновлении "Mango".

  2. Если вы хотите иметь новый шаблон Style / ControlTemplate, вы должны использовать подход «x: Key» / {StaticResource ...}, как упомянуто во второй статье, на которую вы указали.

Наконец, как уже упоминалось Дерек Лакин : надеюсь, эта ошибка будет исправлена ​​в обновлении Mango!

1 голос
/ 27 июля 2012

С выпуском Windows Phone Mango (7.1) функция слияния стилей словаря XAML больше не работает. В настоящее время вам придется изменить ресурс приложения Brush в записи цвета кода; предпочтительно в конструкторе App () в App.xaml.cs.

Пример:

            (App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush).Color = Color.FromArgb(12, 12, 54, 145);
            (App.Current.Resources["PhoneForegroundBrush"] as SolidColorBrush).Color = Colors.Green;
            (App.Current.Resources["PhoneBackgroundBrush"] as SolidColorBrush).Color = Colors.Purple;

Надеемся, что в WP8 SDK нам больше не понадобится этот обходной путь.

1 голос
/ 14 апреля 2011

Если вы создаете словарь ресурсов и называете его чем-то вроде Reset.xaml, который содержит все стандартные ресурсы кисти.Поместите любые пользовательские стили / кисти ресурсов в другой словарь ресурсов (сейчас мы будем называть его Custom.xaml).В App.xaml включите оба этих словаря ресурсов, как показано здесь:

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Reset.xaml"/>
                <ResourceDictionary Source="Resources/Custom.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary> 
    </Application.Resources>

Теоретически этого должно быть достаточно, но, к сожалению, этого нет.По какой-то причине (возможно, ошибка, которая будет исправлена ​​в обновлении Mango), вам также необходимо включить Reset.xaml в Custom.xaml следующим образом:должно быть это;вам не нужно больше ничего делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...