根据MSDN,设置你的应用主题的标准方法是设置RequestedTheme="Dark"
或RequestedTheme="Light"
在顶层Application
实例。
这个伟大的工程为简单的应用程序,但我发现自己想改变单个页面的主题,甚至一个单独的控制(例如光为主题的正文编辑页面VS在相同的应用程序黑暗主题的图像浏览器)多次。
XAML控件具有10S或可视状态和颜色定义的100S和手动设定他们中的每一个是繁琐和难以得到100%的权利!
有一种简单的方法来设置深色或浅色的主题上一个单独的控制?
对于XAML Windows应用商店的应用程序,默认控件的外观和感觉的定义Common/StandardStyles.xaml
。 如果你曾经看着那个文件,你会发现一吨像引用{StaticResource ApplicationForegroundThemeBrush}
看起来很有希望...
不幸的是,这些“主题刷”未在任何地方在您的应用程序定义的,而且也没有简单的方法来设置各个控件或浅或深覆盖。 然而,有一个答案。
幸运的是, 有一个优秀的博客文章由乔·怀特的默认主题颜色,这我已经变成了,你可以在这里找到一个资源字典 。 Dropbox的只做XML预览,所以你可以重命名文件。
复制这些资源到您的应用程序不会自动帮助虽然。 要使用它们,就需要手术覆盖默认控件样式使用它们!
这样做的一个方法是创建一个新的资源字典,例如在Common/CustomStyles.xaml
,并合并到该应用程序的资源,就像这样:
<Application
x:Class="My.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
RequestedTheme="Light">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--
Styles that define common aspects of the platform look and feel
Required by Visual Studio project and item templates
-->
<ResourceDictionary Source="Common/ThemeColors.xaml"/>
<ResourceDictionary Source="Common/StandardStyles.xaml"/>
<ResourceDictionary Source="Common/CustomStyles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
请注意,我们的默认主题是Light
。 如果我们想使一个Dark
为主题的TextBlock
,让我们从复制的视觉风格StandardStyles.xaml
并将其添加到我们的CustomStyles.xaml
并做一些修改。
<Style x:Key="BasicRichTextStyleDark" TargetType="RichTextBlock">
<Setter Property="Foreground" Value="{StaticResource ApplicationForegroundThemeBrushDark}"/>
<Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}"/>
<Setter Property="FontFamily" Value="{StaticResource ContentControlThemeFontFamily}"/>
<Setter Property="TextTrimming" Value="WordEllipsis"/>
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="Typography.StylisticSet20" Value="True"/>
<Setter Property="Typography.DiscretionaryLigatures" Value="True"/>
<Setter Property="Typography.CaseSensitiveForms" Value="True"/>
</Style>
请注意,我们已经追加Dark
的风格名称和主题刷定义! 您可以通过查找做到这一点,取代"ThemeBrush}"
=> "ThemeBrushDark}"
在您的CustomStyles.xaml文件。
现在,您可以创建一个像这样一个黑暗为主题的文本块:
<TextBlock Style="{StaticResource BasicRichTextStyleDark}"/>
当然,你可以使用这种技术用于任何其它类型的控制为好。 有点乏味,但结果是正确的,它不是几乎一样糟糕试图手动定义每一种颜色!
这里没有魔法。 我们只是定义一些颜色,并覆盖有一个我们复制粘贴和修改为使用我们的颜色默认样式。
令人惊讶地似乎没有提到一种解决方案是只对个别控制元件使用RequestedTheme =“暗”或RequestedTheme =“光”。
我做的一个应用,在那里我需要设置一些appbarbuttons黑暗的设置(这是白色的前景) - 因前景属性没有设置这两个圆和字形本身为白色:
<AppBarButton Label="Reload all articles" RequestedTheme="Dark" >
这样一来,我就强迫控制使用我决定的主题。
在文件夹中常见的,你有一个StandardStyles.xaml文件。
在这里,你可以找到所有标准样式默认为城域应用。 您需要取消注释要使用,并添加控制,因为StaticResource的什么样式。
在设计我的应用程序“通讯录”,因为我也想黑暗和光的主题之间的变化我也遇到过同样的问题。 为了您的阙:“ 我如何在C#/ XAML Windows应用商店(地铁UI)应用混合光明和黑暗的主题 ”,我有一个极好的解决方案。
- 我做了两页用相同的代码和相同的内容。 我加入这两个页面彼此上方,然后我做了这两个类型的主题光与暗之间的动态变化。 我给了一个选项,用户是否要暗布局或灯光布局和为每个用户的选择我申请的主题。 我成功地在这种情况下。
解决方法二:
- 如果你想动感的外观和感觉您的应用程序,那么你必须做你自己的静态布局类型,然后你可以绑定你的是静态资源上要应用那种风格的页面。
原谅如果你没有在这里找到答案,但我认为它可以帮助你动态“黑暗”与“光”的主题在你的赢8 Metro应用设置之间进行切换 。
文章来源: How do I mix Light and Dark themes in a C#/XAML Windows Store (Metro UI) App?