2

我试图在 UWP 应用程序中更改 Theme/HighContrast 更改的图像。我点击了链接:定制资源 但是当我在应用程序运行时更改主题时它不起作用。它在应用程序重新启动后工作。我同时遵循了文件夹名称限定符和文件名限定符。我需要做任何额外的改变吗?谁能帮帮我吗?

4

1 回答 1

0

但是当我在应用程序运行时更改主题时它不起作用。它在应用程序重新启动后工作。

它是设计使然,源自官方文档,我们需要监听系统对比度主题更改时将调用的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);
}
于 2020-07-13T05:43:40.440 回答