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

Заранее спасибо

6
Toran Billups 26 Авг 2011 в 02:41

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.

5
Praetorian 25 Авг 2011 в 22:53

Для всех, кто следит за моими комментариями выше - мне пришлось напрямую переключиться с 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;
        }
    }
0
Toran Billups 27 Авг 2011 в 16:03