Я делаю приложение для 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);