Использование квалификаторов в именах файлов изображений не работает в среде выполнения UWP - PullRequest
1 голос
/ 11 июля 2020

Я пытался изменить изображение для изменения темы / HighContrast в приложении UWP. Я перешел по ссылке: tailor-resources Но это не работает, когда я меняю тему во время работы приложения. Работает после перезапуска приложения. Я следил за квалификаторами имени папки и квалификаторами имени файла. Нужно ли мне вносить дополнительные изменения? Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 13 июля 2020

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

Это по замыслу, происходит из официального документа , нам нужно прослушивать событие MapChanged , которое будет вызываться, когда система контрастная тема изменена. И измените источник изображения вручную.

Например:

public MainPage()
{
    this.InitializeComponent();
    var qualifierValues = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues;
    qualifierValues.MapChanged += new Windows.Foundation.Collections.MapChangedEventHandler<string, string>(QualifierValues_MapChanged);
}

private async void QualifierValues_MapChanged(IObservableMap<string, string> sender, IMapChangedEventArgs<string> @event)
{
    var dispatcher = this.MyImage.Dispatcher;
    if (dispatcher.HasThreadAccess)
    {
        this.RefreshUIImages();
    }
    else
    {
        await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => this.RefreshUIImages());
    }
}

private void RefreshUIImages()
{
    var namedResource = Windows.ApplicationModel.Resources.Core.ResourceManager.Current.MainResourceMap[@"Files/Assets/Images/logo.jpg"];
    this.MyImage.Source = new Windows.UI.Xaml.Media.Imaging.BitmapImage(namedResource.Uri);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...