Я не прошел сертификацию, потому что у меня есть полностью белое изображение. Поэтому, когда пользователь переключается на светлую тему, он терпит неудачу, потому что вы ее не видите. Как мне поменять местами это изображение в зависимости от примененной темы?
Заранее спасибо
3 ответа
В XAML
<Image Source="{Binding ImageSource}" />
В модели представления, содержащей свойство ImageSource
public string ImageSource
{
get
{
if( (Visibility)App.Current.Resources["PhoneDarkThemeVisibility"]
== Visibility.Visible ) {
return "/path/to/dark/image.png";
} else {
return "/path/to/light/image.png";
}
}
private set {}
}
Это может не изменить изображение, если пользователь захоронит ваше приложение, изменит тему и вернется к приложению.
Один из способов справиться с этим сценарием - кэшировать текущий параметр темы в конструкторе класса приложения, а затем сравнить его с текущим параметром в App.Application_Activated
. Если они отличаются, вам нужно каким-то образом указать, что указанная выше модель представления необходимо запустить уведомление об изменении свойства для ImageSource
.
<Image HorizontalAlignment="Center"Stretch="None" Visibility="{StaticResource PhoneLightThemeVisibility}" Source="/MyApplication;component/imageDarkTheme.png" />
<Image HorizontalAlignment="Center" Stretch="None" Visibility="{StaticResource PhoneDarkThemeVisibility}"Source="/MyApplication;component/imageLightTheme.png" />
Для всех, кто следит за моими комментариями выше - мне пришлось напрямую переключиться с ImageBrush на Image (xaml ниже)
<Button Tag="{Binding}" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="-10,20,0,0" BorderThickness="0" Width="105" Height="102" Click="ShowKioskOnMap_Click">
<Image Source="../images/arrow.png" Width="55" Height="53" ImageOpened="Image_ImageOpened"/>
</Button>
Затем в конструкторе страницы, которую я использую, я выполнил поиск по теме, чтобы предотвратить любые проблемы, когда состояние приложения восстанавливается, например, после телефонного звонка (или просто загрузки представления в первый раз)
InitializeComponent();
theme = ""; //field level var (could make it dark by default if needed)
if ((Visibility)App.Current.Resources["PhoneDarkThemeVisibility"] == Visibility.Visible)
{
theme = "dark";
}
else
{
theme = "light";
}
И мне пришлось реализовать следующее в моем открытом событии, чтобы переключаться на основе темы
private void Image_ImageOpened(object sender, RoutedEventArgs e)
{
var brush = (sender as Image);
if (brush.Stretch == Stretch.Uniform)
{
if (theme == "light")
brush.Source = new BitmapImage(new Uri("../images/arrowLight.png", UriKind.Relative));
brush.Stretch = Stretch.Fill;
}
}
Похожие вопросы
Связанные вопросы
Новые вопросы
windows-phone-7
Windows Phone - это устаревшая мобильная операционная система и платформа для разработки программного обеспечения от Microsoft. Используйте этот тег для вопросов, относящихся к версии 7.x