我有一个适用于Windows Phone 8.1的应用程序及其UWP版本。我想在Windows中更改应用程序时动态更改应用程序的背景。
用例将是:
我希望这样做,不需要重启。我已经在其他应用中看到了这一点,所以它必须以某种方式存在,但我无法弄明白。
如果需要重新启动,那么解决方案B也可以。
感谢。
答案 0 :(得分:5)
我建议创建设置单例类,它将存储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}">
答案 1 :(得分:3)
对于可能在运行时更改的颜色,请使用ThemeResource
代替StaticResource
:
{ThemeResource ApplicationPageBackgroundThemeBrush}
答案 2 :(得分:0)
我的问题的答案是我不需要在app.xaml文件中设置App.RequestedTheme属性,以使应用程序的主题遵循操作系统之一。
我只是认为需要通过代码手动完成。