Я пытаюсь изменить ImageSource ImageBrush, когда пользователь меняет тему своего телефона в своих настройках.

Итак, в настоящее время у меня есть это:

XAML:

<ImageBrush ImageSource="{Binding ImageSource, Mode=OneTime}" Stretch="UniformToFill"/>

Код позади:

public string ImageSource
{
    get
    {
        if ((Visibility)App.Current.Resources["PhoneDarkThemeVisibility"]
            == Visibility.Visible)
        {
            return "/Images/BGDark.png";

        }
        else
        {
            return "/Images/BG.png";

        }
    }
    private set { }
}

Как видите, я устанавливаю фон при запуске приложения. Приложение установит фон, увидев, какая тема была выбрана.

Моя проблема теперь в том, что когда пользователь переходит в настройки (приложение не было закрыто!) И меняет тему, Background / ImageSource не обновляется, когда он активирует страницу приложения. Я подумал, что, возможно, я смогу изменить его, установив здесь новый Фон:

App.xaml.cs:

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    //access somehow the CodeBehind of my MainPage and change the ImageSource
}

Но я не знаю, как мне получить доступ к свойству ... Может быть, есть другое решение для изменения фона, пока приложение все еще работает, а пользователь меняет тему?

0
Rudi 2 Сен 2014 в 15:08

2 ответа

Лучший ответ

Попробуй это:

Класс модели:

class SampleClass
{
    public string ImageSource
    {
        get
        {
            if ((Visibility)App.Current.Resources["PhoneDarkThemeVisibility"] == Visibility.Visible)
            {
                return "Dark";//You can set your Image here

            }
            else
            {
                return "Light";//You can set your Image here

            }
        }
        private set { }
    }
}

Применение :

private void Application_Activated(object sender, ActivatedEventArgs e)
{
    SampleClass obj = new SampleClass();
    Debug.WriteLine(obj.ImageSource);
}

ПРИМЕЧАНИЕ.

Вам необходимо отметить надгробие при деактивации во время отладки , как показано на рисунке. После этого он будет работать так же, как вы должны сделать tombstone при деактивации во время отладки

1
Amit Bhatiya 2 Сен 2014 в 15:58

Вы можете попробовать поместить логику на Page .OnNavigatedTo () вместо Application_Activated():

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    //do some logic to check if changing Background is necessary
    //if it is then change the Background, else simply return;
}
1
har07 2 Сен 2014 в 15:53
Также пробовал это, но App.Current.Resources не был «обновлен». Когда я запускал приложение с черной темой, ресурсы были черными. Если бы я изменил его, ресурсы все равно были бы черными, а не белыми.
 – 
Rudi
2 Сен 2014 в 16:23