Тематические ресурсы XAML в проекте WP7 - PullRequest
3 голосов
/ 09 января 2011

Я делаю приложение для Windows Phone 7, и меня немного смущают темные / светлые темы.

С панорамой вы очень часто устанавливаете фоновое изображение. Проблема в том, что очень сложно сделать изображение, подходящее как для темных, так и для светлых тем. Как мы должны действовать?

Есть ли способ заставить темную / светлую тему для панорамы? Это позволит избежать создания фоновых изображений для определенной темы. Тогда как мне это сделать? Я нашел файлы xaml в C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Design. Если это правильный путь, как я могу импортировать их для моей панорамы?

Или, если нет способа (или если это неправильно) вызвать темную / светлую тему: как написать условный XAML для установки правильных ресурсов? Теперь у меня есть следующий XAML (default.xaml), который подходит для темной темы:

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

Но когда я использую светлую тему, черные элементы управления и черные тексты плохо читаются на моих темных фоновых рисунках. Поэтому я сделал разные картинки, которые я могу использовать таким образом:

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

Теперь моя проблема состоит в том, чтобы сделать XAML условным для объявления правильных вещей в зависимости от текущей темы.

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

РЕДАКТИРОВАТЬ : фрагмент кода для загрузки файла xaml как ResourceDictionary

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);

Ответы [ 2 ]

5 голосов
/ 09 января 2011

Для наложения темной или белой темы вы действительно можете использовать стили, определенные в указанной вами папке.Скопируйте и вставьте необходимые правила в свой файл App.xaml (хорошее начало - PhoneForegroundColor, PhoneBackgroundColor и связанные кисти).

Вероятно, лучше остаться в курсе тем и загрузить другое изображениедля светлых и темных тем.Вот статья, объясняющая, как это сделать: http://blog.jayway.com/2010/12/16/theme-aware-panorama-background-in-windows-phone-7/

0 голосов
/ 19 декабря 2012

Есть еще одна возможность, которую я нашел: Вы можете использовать Coding4Fun Toolkit Converter в соответствии с этими инструкциями . Однако я не могу правильно их использовать.

Другая возможность - использовать OpacityMask . Но это работает только для черно-белых изображений: /

Решение Юсефа выглядит интересно. но загрузка занимает слишком много времени. Изображение будет изменено примерно через 1 с после запуска приложения. Я протестировал это на Nokia 820. Я переместил вызов для установки DataContext в загруженном событии, который был вызван гораздо позже. Теперь вызов происходит в конструкторе, поэтому изображение будет уже установлено, когда приложение отобразит его. Тем не менее, он по-прежнему добавляет больше времени загрузки :( Какие-либо предложения о том, как улучшить это?

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