如何在C#/ XAML Windows应用商店(地铁UI)应用混合光明和黑暗的主题?(How do

2019-08-17 02:41发布

根据MSDN,设置你的应用主题的标准方法是设置RequestedTheme="Dark"RequestedTheme="Light"在顶层Application实例。

这个伟大的工程为简单的应用程序,但我发现自己想改变单个页面的主题,甚至一个单独的控制(例如光为主题的正文编辑页面VS在相同的应用程序黑暗主题的图像浏览器)多次。

XAML控件具有10S或可视状态和颜色定义的100S和手动设定他们中的每一个是繁琐和难以得到100%的权利!

有一种简单的方法来设置深色或浅色的主题上一个单独的控制?

Answer 1:

对于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}"/>

当然,你可以使用这种技术用于任何其它类型的控制为好。 有点乏味,但结果是正确的,它不是几乎一样糟糕试图手动定义每一种颜色!

这里没有魔法。 我们只是定义一些颜色,并覆盖有一个我们复制粘贴和修改为使用我们的颜色默认样式。



Answer 2:

令人惊讶地似乎没有提到一种解决方案是只对个别控制元件使用RequestedTheme =“暗”RequestedTheme =“光”。

我做的一个应用,在那里我需要设置一些appbarbuttons黑暗的设置(这是白色的前景) - 因前景属性没有设置这两个圆和字形本身为白色:

<AppBarButton Label="Reload all articles" RequestedTheme="Dark" >

这样一来,我就强迫控制使用我决定的主题。



Answer 3:

在文件夹中常见的,你有一个StandardStyles.xaml文件。

在这里,你可以找到所有标准样式默认为城域应用。 您需要取消注释要使用,并添加控制,因为StaticResource的什么样式。



Answer 4:

在设计我的应用程序“通讯录”,因为我也想黑暗和光的主题之间的变化我也遇到过同样的问题。 为了您的阙:“ 我如何在C#/ XAML Windows应用商店(地铁UI)应用混合光明和黑暗的主题 ”,我有一个极好的解决方案。

  • 我做了两页用相同的代码和相同的内容。 我加入这两个页面彼此上方,然后我做了这两个类型的主题光与暗之间的动态变化。 我给了一个选项,用户是否要暗布局或灯光布局和为每个用户的选择我申请的主题。 我成功地在这种情况下。

解决方法二:

  • 如果你想动感的外观和感觉您的应用程序,那么你必须做你自己的静态布局类型,然后你可以绑定你的是静态资源上要应用那种风格的页面。

原谅如果你没有在这里找到答案,但我认为它可以帮助你动态“黑暗”与“光”的主题在你的赢8 Metro应用设置之间进行切换



文章来源: How do I mix Light and Dark themes in a C#/XAML Windows Store (Metro UI) App?