, но он не работает, когда я меняю тему во время работы приложения. Он работает после перезапуска приложения.
Это по замыслу, происходит из официального документа , нам нужно прослушивать событие 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);
}