我可以启用无限量的自定义主题,除了几个基本主题: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)的主要内容,如果未能解决你的问题,请参考以下文章