首页 > 解决方案 > 在图像文件名中使用限定符在 UWP 运行时不起作用

问题描述

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

标签: xamluwpthemesqualifiershigh-contrast

解决方案


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

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

推荐阅读