我可以启用无限量的自定义主题,除了几个基本主题:Default,Light,Dark和HighContrast? (UWP)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以启用无限量的自定义主题,除了几个基本主题:Default,Light,Dark和HighContrast? (UWP)相关的知识,希望对你有一定的参考价值。

标题解释了大部分内容。但是,例如在我的应用程序“设置”菜单中,我允许用户选择20多种不同的颜色主题。当Windows 10仅允许我自定义一组主题(如Default,Light,Dark和HighContrast主题)时,如何实现此类功能? FrameworkElement.RequestedTheme属性不提供许多选项来使用简单和简单。谢谢!

答案

为我工作的APPEARS首先创建我想要的所有主题,并将它们放在他们自己的ResourceDictionary.xaml文件中。一旦完成并希望在主题之间切换,我只需创建一个新的ResourceDictionary对象,然后将其Source属性设置为我想要加载的主题。

现在,在将自定义主题添加到ThemeDictionary时,必须使用此方法的x:Key值是Default键值,而不是Light或Dark键值。他们将引入限制。

因此,在将自定义主题加载到新创建的ResourceDictionary之后,必须首先从TheemeDictionary中删除具有“Default”作为其关联键的ResourceDictionary。这是因为您显然不能在字典中拥有共享相同键的多个对象。

接下来,将新的ResourceDictionary添加到ThemeDictionary中,代替刚刚删除的ThemeDictionary。给它完全相同的“默认”键。

最后,这样做:

if (this.RequestedTheme == ElementTheme.Light)
    this.RequestedTheme = ElementTheme.Dark;
else
    this.RequestedTheme = ElementTheme.Light;

在这里,您可以在明暗主题之间切换以强制更改属性(我猜RequestedTheme属性需要一个与当前值不同的值来触发属性更改事件)。但由于ThemeDictionary中没有浅色或深色主题,系统将默认返回到您所具有的默认主题词典。

请记住,您无法更改根App类的RequestedTheme值,否则您将收到运行时错误。一个很好的技巧是简单地更改rootFrame框架的RequestedTheme属性,因为无论如何都将在该框架内构建整个UI。

如果有人知道更复杂/更合适的方法,请告诉我们!

以上是关于我可以启用无限量的自定义主题,除了几个基本主题:Default,Light,Dark和HighContrast? (UWP)的主要内容,如果未能解决你的问题,请参考以下文章

如何让wordpress了解我的自定义主题不是儿童主题?

如何在我的自定义主题中包含自定义 js 文件?

安卓:Activity的自定义主题

如何使用 useTheme() 钩子使用我的自定义主题?

如何为 Material-ui 的组件设置主要的浅色/深色?我正在使用像这里这样的自定义主题

如何在 PrimeNG 中设置我们自己的自定义主题