如何以编程方式更改Win 8.1或Win 10 UWP应用程序的背景主题?

我有一个Windows Phone 8.1的应用程序和它的UWP版本。 我想在Windows中更改它的dynamic背景。

用例如下:

  1. 启动应用程序,背景主题是黑暗的。
  2. 按电话上的主页button
  3. 将背景主题更改为浅色
  4. 回到应用程序(基本上从后台切换到它)
  5. 应用程序的主题会自动更改为新的主题

我希望这样做,没有重新启动。 我已经在其他应用程序中看到过,所以它可能有某种程度上,但我不明白。

如果需要重新启动,那么解决schemeB也可以。

谢谢。

Solutions Collecting From Web of "如何以编程方式更改Win 8.1或Win 10 UWP应用程序的背景主题?"

我会建议创建设置单身人士类,将存储AppTheme状态,并实现INotifyPropertyChanged接口

public class Settings : INotifyPropertyChanged { private static volatile Settings instance; private static readonly object SyncRoot = new object(); private ElementTheme appTheme; private Settings() { this.appTheme = ApplicationData.Current.LocalSettings.Values.ContainsKey("AppTheme") ? (ElementTheme)ApplicationData.Current.LocalSettings.Values["AppTheme"] : ElementTheme.Default; } public static Settings Instance { get { if (instance != null) { return instance; } lock (SyncRoot) { if (instance == null) { instance = new Settings(); } } return instance; } } public ElementTheme AppTheme { get { return this.appTheme; } set { ApplicationData.Current.LocalSettings.Values["AppTheme"] = (int)value; this.OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } 

相比之下,您可以在页面上创建属性设置,这将返回单身的值,并将页面的RequestedTheme绑定到AppTheme属性

 <Page x:Class="SamplePage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" RequestedTheme="{x:Bind Settings.AppTheme, Mode=OneWay}"> 

对于运行时可能会改变的颜色,使用ThemeResource而不是StaticResource

 {ThemeResource ApplicationPageBackgroundThemeBrush} 

我的问题的答案是,我不需要设置app.xaml文件中的App.RequestedTheme属性,以使应用程序的主题遵循的操作系统之一。

我只是认为它需要由代码手动完成。