当前位置:  开发笔记 > 编程语言 > 正文

以编程方式更改Windows 10 UWP App中的主题

如何解决《以编程方式更改Windows10UWPApp中的主题》经验,为你挑选了3个好方法。

我能够改变主题使用this.RequestedTheme = ElementTheme.Dark; 但我需要的是整个应用程序级别,因为这只会将当前页面的主题更改为黑暗.

每当我尝试这个时,App.Current.RequestedTheme = ApplicationTheme.Dark; 我总会得到这个错误

UWPApp.exe中出现"System.NotSupportedException"类型的异常,但未在用户代码中处理

有没有这样的方法,我可以将整个应用程序主题从Light更改为Dark,反之亦然?

我正在使用VS2015



1> Threezool..:

更新了我最终决定的答案.

我使用了一个包含所有应用程序设置的设置类,包括要使用的主题.由于主题只能在启动时设置,我们需要确保将它们设置为主题.这是我使用的代码:

在App.xaml.cs文件中:

public App()
{
    //Load settings
    AppSettings.LoadSettings();
    this.RequestedTheme = AppSettings.SelectedTheme;

    this.InitializeComponent();
}

在App.xaml文件中,请确保删除此属性:

    RequestedTheme="Light"

如果没有删除它,它总是默认为亮,无法改变它.

这样,用户可以选择主题,在应用启动时存储和使用主题.只需确保加载它并在应用程序初始化阶段应用它.



2> Burak Kaan K..:

应用程序的RequestedTheme只能在构造函数中更新.但是(如您所发现的),Page的RequestedTheme可以在运行时随时更新.

这真的很烦人,我知道除了这个MSDN页面之外没有太多关于这种情况的信息:

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.application.requestedtheme?f=255&MSPPError=-2147217396

主题只能在应用程序启动时设置,而不是在运行时设置.在应用程序运行时尝试设置RequestedTheme会引发异常(Microsoft .NET代码的NotSupportedException).如果您为用户提供选择属于应用程序UI的主题的选项,则必须将该设置保存在应用程序数据中,并在重新启动应用程序时应用该设置.

应该有解决方法,但他们会非常愚蠢.Microsoft在他们自己的官方应用程序如Groove中这样做...

我的解决方案是在元素级别而不是应用程序级别上进行主题更新.

    创建自己的BasePage(继承自Page)

    将您的设置保存在静态类下,并创建一个事件以跟踪模型更改.

    在您的BasePage构造函数中,听取此事件并在有效时应用更改.

我现在无法提供代码示例(因为我今天非常忙),但这是迄今为止恕我直言最有效的方式.



3> alxnull..:

我找到了另一个对我来说很好的解决方案。如果该应用程序具有一个加载页面的根框架(默认情况下就是这种情况),则可以将该根框架的请求主题设置为所需的值,并且该应用程序的主题无需重新启动即可更改。代码如下:

// Set theme for window root.
if (Window.Current.Content is FrameworkElement frameworkElement)
{
   frameworkElement.RequestedTheme = theme;
}

我从Windows模板工作室的GitHub存储库片段在这里,所以这似乎有种要做到这一点的最好办法。

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有