支持高对比度主题 (XAML)

Applies to Windows and Windows Phone

要查找本主题的 HTML/JavaScript 版本吗?请参阅支持高对比度主题 (HTML)

默认情况下,使用 C++、C# 或 Visual Basic 的 Windows 运行时应用支持高对比度主题。如果用户已经选择他们希望系统使用系统设置或辅助功能工具中的高对比度主题,则框架将自动使用为 UI 中的控件和组件生成高对比度布局和呈现的颜色和样式设置。

此默认支持假设使用默认主题和模板。这些主题和模板引用系统颜色作为资源定义,并且资源来源在系统使用高对比度模式时会自动改变。但是,如果你为控件使用了自定义的模板、主题和样式,请注意不要禁用对高对比度的内置支持。如果你使用某个适用于 Microsoft Visual Studio 的 XAML 设计器来设置样式,那么,每当你定义与默认模板具有显著区别的模板时,该设计器都会在主要的主题旁边生成一个单独的高对比度主题。单独的主题字典会进入 ThemeDictionaries 集合(ResourceDictionary 元素的一个专门属性)中。

有关主题和控件模板的详细信息,请参阅快速入门:控件模板。通常,有必要查看特定控件的 XAML 资源字典和主题,并查看这些主题的构造方式以及它们引用资源的方式。对于每个可能的高对比度设置来说,这些资源相似但不同。

检测高对比度主题何时被启用

Windows 运行时应用可以使用 AccessibilitySettings 类的成员检测当前的高对比度主题设置。HighContrast 属性确定高对比度主题当前是否处于选中状态。如果 HighContrast 设置为 true,则下一步是检查 HighContrastScheme 属性的值以获取所使用的高对比度主题的名称。"高对比度白色"和"高对比度黑色"通常是应当与你的代码相对应的 HighContrastScheme 的值。XAML 定义的 ResourceDictionary 键不能有空格,因此,资源字典中这些主题的键通常分别是 "HighContrastWhite" 和 "HighContrastBlack"。你还应当针对高对比度主题提供当值是其他字符串时的回滚逻辑。XAML 高对比度示例显示了这样的回滚逻辑。

注意  确保从初始化应用且已经显示内容的范围内调用 AccessibilitySettings 构造函数。

从 Windows 8.1 开始,应用可以在运行时切换使用高对比度资源值。只要在样式或模板 XAML 中使用 ThemeResource 标记扩展请求了资源,这便会奏效。默认主题 (generic.xaml) 都使用此 ThemeResource 方法,因此,如果你使用默认的控件主题,则可以实现此行为。如果你还在自定义的模板和样式中使用了此 ThemeResource 资源方法,则自定义的控件或自定义的控件样式可以实现此行为。不过,针对目标 Windows 8 构建的应用在应用正在运行时不会自动重新加载资源。

Windows 8 行为

Windows 8 不支持 ThemeResource 标记扩展,该扩展自 Windows 8.1 开始提供支持。此外,Windows 8 也不支持动态切换 Windows 运行时应用的主题相关资源。必须重新启动应用,才能应用针对 XAML 模板和样式的主题更改。这种用户体验并不理想,因此强烈建议重新编译和定位 Windows 8.1,使其能通过 ThemeResource 使用样式,并能在用户执行相应操作时动态切换主题。对于为 Windows 8 编译的应用,如果其在 Windows 8.1 上运行,将继续使用 Windows 8 行为。

相关主题

UI 对比度和设置示例
XAML 辅助功能示例
XAML 高对比度示例
AccessibilitySettings

 

 

显示:
© 2014 Microsoft