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

问题描述 投票:0回答:1

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

c# xaml uwp
1个回答
0
投票

为我工作的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。

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

© www.soinside.com 2019 - 2024. All rights reserved.