【问题标题】:Custom Windows 10 Universal App Theme自定义 Windows 10 通用应用程序主题
【发布时间】:2015-09-10 17:14:27
【问题描述】:

Windows 为 Windows 10 通用应用程序提供明暗主题。这在请求主题的应用程序节点中的 App.xaml 中进行了更改。

<Application
x:Class="Template.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Template"
RequestedTheme="Dark">

有没有办法制作自定义主题?我意识到您可以制作资源字典并放置自定义颜色,但是您必须在要应用它的每个属性中包含 {static resource...} 。我认为定义我自己的 RequestedTheme 很容易,所以我只需要包含一次。

【问题讨论】:

    标签: xaml themes win-universal-app windows-10


    【解决方案1】:

    three themes that XAML framework support。但是,您可以通过复制原始主题并将其放入 App.xaml 的 ThemeDictionaries 来自定义每个主题。默认主题位于:

    C:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.10240.0(或 任何版本)\Generic\Generic.xaml

    复制后,您现在可以更改默认值,例如颜色、字体大小、字体系列和其他主题资源。

    <Application 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      RequestedTheme="Dark">
      <Application.Resources>
        <ResourceDictionary>
          <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Default">
              <!-- Copy theme resources here -->
            </ResourceDictionary>
            <ResourceDictionary x:Key="HighContrast">
              <!-- theme resources -->
            </ResourceDictionary>
            <ResourceDictionary x:Key="Light">
              <!-- theme resources -->
            </ResourceDictionary>
          </ResourceDictionary.ThemeDictionaries>
        </ResourceDictionary>
      </Application.Resources>
    

    【讨论】:

    • 所以我将 generic.xaml 复制到我项目中的样式文件夹中? VS如何知道使用这个而不是默认的?您可以更深入地了解 吗?如果我想让背景变成红色而不是黑色(比如在黑暗主题中),你能填写代码吗?
    • generic.xaml 应该是您的默认样式所在的位置。
    • 您应该永远将 generic.xaml 复制到您的项目中。这将阻止您收到更新。相反,您可以覆盖特定颜色或画笔。 ThemeResources docs 提供了大量关于主题的有用信息。请参阅如何添加 TV-safe colors for Xbox 的示例,作为有关如何覆盖影响其他所有内容的一些关键值的指南。
    【解决方案2】:

    关于复制 Generic.xaml

    关于将 Generic.xaml 复制到您的项目的主题,此页面上的评论指出:

    这将阻止您收到更新

    虽然这是真的,但您可能希望更好地控制应用何时接收更新。

    我同意将 generic.xaml 复制到您的项目中是一个坏主意。这些资源是内置在您正在使用的框架中的,因此如果您想与这些资源保持一致,您只需按键引用它们即可。

    但是,为了保持对这些资源接受更新时间的控制(即,您不希望在未测试应用的情况下受到无法控制的更新的影响),请使用 generic.xaml 中的副本创建您自己的基本样式和在这些副本上建立自己的风格是正确的方法。

    关于自定义主题

    不过,这些都不能解决这里的问题;如果您使用RequestedTheme 系统,您只能在名为 Light 和 Dark 的 2 个主题调色板之间进行选择。您唯一的灵活性是将哪个调色板应用于哪些元素。

    换句话说,RequestedTheme 机制仅限于一组调色板。这些调色板颜色可以是您喜欢的任何颜色,尽管它们通常是在设计时定义的。在这个阶段我不确定调色板的运行时自定义。

    如果您想允许用户使用自定义主题调色板,则需要为您的调色板牺牲一个浅色/深色调色板,使牺牲的调色板不可用。这可能是也可能不是您的用户想要的,因此请适当权衡决定。

    RequestedTheme 系统功能强大,允许在两种明暗模式之间轻松切换,但在此阶段不够灵活,无法支持超过 2 个自定义调色板。

    高对比度

    有一个HighContrast 模式允许多 4 个(?)调色板,虽然我不熟悉这些。定义这些调色板的方式与通过RequestedTheme 系统定义亮/暗调色板的方式相同,因此可能其他调色板也可以以相同的方式进行配置。

    也许将来我会在High Contrast 主题方面获得经验,然后回来完成这一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多