Kontrastthemen

Kontrastdesigns verwenden eine eingeschränkte Farbpalette (mit Kontrastverhältnissen in der Regel bei oder über 7:1), um die Lesbarkeit zu verbessern, visuelle Ermüdung zu verringern und Benutzer zu unterstützen, die eine hohe visuelle Trennung zwischen Vordergrund- und Hintergrundinhalten verwenden.

Hinweis

Verwechseln Sie keine Kontrastdesigns mit hellen und dunklen Designs. Helle und dunkle Designs verwenden breitere Farbpaletten und sind nicht speziell für den maximalen Kontrast optimiert. Weitere Informationen zu hellen und dunklen Designs finden Sie unter "Farbe".

Zum Auswerten des App-Verhaltens unter Kontrastdesigns, aktivieren und passen Sie sie in Einstellungen > Barrierefreiheit > Kontrastdesigns an.

Tipp

Sie können auch die linke Alt + linke Umschalt + Druck (PrtScn auf einigen Tastaturen) drücken, um schnell Kontrastthemen umzuschalten. Wenn zuvor kein Kontrastdesign ausgewählt wurde, wird "Aquatic" standardmäßig angewendet (siehe folgende Abbildung).

Der Rechner wird im Lichtdesign und aquatisch kontrastierenden Design angezeigt.

Festlegen von HighContrastAdjustment auf "None"

Windows Apps aktivieren HighContrastAdjustment standardmäßig. Dadurch wird weißer Vordergrundtext mit einem Hervorhebungshintergrund in Schwarz erzwungen, um den hohen Kontrast in allen Inhalten beizubehalten. Wenn Ihre App bereits richtige systembewusste Pinsel verwendet, setzen Sie dies auf Keine, damit Ihr beabsichtigter Kontrast-Themenstil übernommen wird.

Erkennen von hohem Kontrast

Sie können den Kontrastmodus programmgesteuert erkennen, indem Sie Microsoft.UI.System.ThemeSettings verwenden und die HighContrast-Eigenschaft überprüfen.

Erstellen von Themenwörterbüchern

Verwenden Sie ResourceDictionary.ThemeDictionaries, um designspezifische Ressourcen zu definieren. Auf diese Weise können Ihre App explizite Werte für Default (Dark), Light und HighContrast bereitstellen, während sie weiterhin am Wechseln des Laufzeitdesigns teilnehmen.

Tipp

Das Kontrastdesign bezieht sich im Allgemeinen auf das Feature, während HighContrast auf das spezifische Wörterbuch verweist, auf das verwiesen wird.

  1. Erstellen Sie in "App.xaml" eine ThemeDictionaries-Auflistung , die mindestens die Einträge "Default " und "HighContrastResourceDictionary " enthält (für dieses Beispiel ist ein Light-Wörterbuch optional).

  2. Definieren Sie in Der Standardeinstellung die benötigten Pinselressourcen , in der Regel SolidColorBrush-Einträge , die durch semantische Verwendung schlüsseliert werden.

  3. Ordnen Sie in HighContrast jede Ressource einem entsprechenden dynamischen SystemColor-Wert zu. Informationen zur Kombination finden Sie unter Kontrastfarben.

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.ThemeDictionaries>
                <!-- Default is a fallback if a more precise theme isn't called
                out below -->
                <ResourceDictionary x:Key="Default">
                    <SolidColorBrush x:Key="BrandedPageBackgroundBrush" Color="#E6E6E6" />
                </ResourceDictionary>
    
                <!-- Optional, Light is used in light theme.
                If included, Default will be used for Dark theme -->
                <ResourceDictionary x:Key="Light">
                    <SolidColorBrush x:Key="BrandedPageBackgroundBrush" Color="#E6E6E6" />
                </ResourceDictionary>
    
                <!-- HighContrast is used in all high contrast themes -->
                <ResourceDictionary x:Key="HighContrast">
                    <SolidColorBrush x:Key="BrandedPageBackgroundBrush" Color="{ThemeResource SystemColorWindowColor}" />
                </ResourceDictionary>
            </ResourceDictionary.ThemeDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    

Kontrastfarben

Auf Einstellungen > Barrierefreiheit > Kontrastthemen (siehe unten) können Benutzer eines von vier integrierten Themen auswählen: Aquatisch, Wüste, Dämmerung und Nachthimmel.

Designeinstellungen für Kontrast.

Nachdem Sie ein Design ausgewählt haben, können Benutzer es direkt anwenden oder einzelne Farben bearbeiten. Die folgende Abbildung zeigt das Dialogfeld "Bearbeiten" für "Aquatic".

Einstellungen – Dialogfeld

In der folgenden Tabelle sind die SystemColor-Ressourcen mit Kontrastdesign und die empfohlenen Vordergrund-/Hintergrundpaare aufgeführt. Jeder SystemColor-Wert wird automatisch aktualisiert, wenn der Benutzer Designs wechselt.

Farbmuster Beschreibung
Farbmuster von SystemColorWindowColor, das für den Hintergrund von Seiten, Bereichen, Popups und Fenstern verwendet wird. SystemColorWindowColor
Hintergrund von Seiten, Bereichen, Popups und Fenstern.

Koppeln mit SystemColorWindowTextColor
Farbmuster von SystemColorWindowTextColor, das für Überschriften, Textkörper, Listen, Platzhaltertext, App- und Fensterrahmen sowie jede UI verwendet wird, mit der nicht interagiert werden kann. SystemColorWindowTextColor
Überschriften: Textkörper, Listen, Platzhaltertext, App- und Fensterrahmen, jedes UI-Element, mit dem keine Interaktion möglich ist.

Koppeln mit SystemColorWindowColor
Farbmuster von SystemColorWindowTextColor, das für Links verwendet wird. SystemColorHotlightColor-Hyperlinks
.

Koppeln mit SystemColorWindowColor
Farbmuster von SystemColorWindowTextColor, das für inaktive oder deaktivierte UI verwendet wird. SystemColorGrayTextColor
Inaktive oder deaktivierte Benutzeroberfläche.

Koppeln mit SystemColorWindowColor
Farbmuster von SystemColorWindowTextColor, das für die Vordergrundfarbe von Text oder UI verwendet wird, der ausgewählt, mit dem interagiert wird (hover, gedrückt) oder in Bearbeitung ist. SystemColorHighlightTextColor
Vordergrundfarbe von Text oder UI, der ausgewählt, interagiert mit (darauf zeigen, gedrückt) oder in Bearbeitung ist.

Koppeln mit SystemColorHighlightColor
Farbmuster von SystemColorWindowTextColor, das für Hintergrund- oder Akzentfarbe der ausgewählten Benutzeroberfläche verwendet wird, mit der interagiert wird (darauf zeigen, gedrückt) oder in Bearbeitung. SystemColorHighlightColor
Hintergrund- oder Akzentfarbe der ausgewählten Benutzeroberfläche. Diese bezieht sich auf die Interaktion mit der Benutzeroberfläche (darauf zeigen, gedrückt) oder wenn sie in Bearbeitung ist.

Verwendet mit SystemColorHighlightTextColor
Farbmuster von SystemColorWindowTextColor, das für die Vordergrundfarbe von Schaltflächen und jeder Ui verwendet wird, mit der interagiert werden kann. SystemColorButtonTextColor
Vordergrundfarbe von Schaltflächen und jeder Ui, mit der interagiert werden kann.

Koppeln mit SystemColorButtonFaceColor
Farbmuster von SystemColorWindowTextColor, das für die Hintergrundfarbe von Schaltflächen und jeder Ui verwendet wird, mit der interagiert werden kann. SystemColorButtonFaceColor
Hintergrundfarbe von Schaltflächen und jeder UI, mit der interagiert werden kann.

In Verbindung mit SystemColorButtonTextColor

Die nächste Tabelle enthält praktische Beispiele, die SystemColorWindowColor als Hintergrundbasislinie verwenden.

Beispiel Werte
Ein Fenster mit Text mithilfe der Fenstertextfarbe. SystemColorWindowTextColor
Ein Fenster mit Linktext mit der Farbe SystemColorHotlightColor
Ein Fenster mit inaktivem Text mit der grauen Textfarbe. SystemfarbeGrauerTextFarbe
Ein Fenster mit Text in der Textfarbe der Hervorhebung auf der Hervorhebungsfarbe. SystemColorHighlightTextColor + SystemColorHighlightColor
Ein Fenster mit einer Schaltfläche in der 3D-Flächenfarbe und einem Schaltflächentext in der Schaltflächentextfarbe. SystemColorButtonTextColor + SystemColorButtonFaceColor

Der folgende Codeausschnitt zeigt, wie Sie einen Wert für BrandedPageBackgroundBrush auswählen. In diesem Fall ist SystemColorWindowColor angemessen, da die Ressource als Hintergrund auf Seitenebene verwendet wird.

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <!-- Default is a fallback if a more precise theme isn't called
            out below -->
            <ResourceDictionary x:Key="Default">
                <SolidColorBrush x:Key="BrandedPageBackgroundBrush" Color="#E6E6E6" />
            </ResourceDictionary>

            <!-- Optional, Light is used in light theme.
            If included, Default will be used for Dark theme -->
            <ResourceDictionary x:Key="Light">
                <SolidColorBrush x:Key="BrandedPageBackgroundBrush" Color="#E6E6E6" />
            </ResourceDictionary>

            <!-- HighContrast is used in all high contrast themes -->
            <ResourceDictionary x:Key="HighContrast">
                <SolidColorBrush x:Key="BrandedPageBackgroundBrush" Color="{ThemeResource SystemColorWindowColor}" />
            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Application.Resources>

Wenden Sie dann die Ressource auf den Hintergrund des Zielelements an.

<Grid Background="{ThemeResource BrandedPageBackgroundBrush}">

Im vorherigen Beispiel wird zweimal verwendet {ThemeResource} : einmal zum Auflösen von SystemColorWindowColor und erneut zum Auflösen von BrandedPageBackgroundBrush. Diese zweistufige Suche ist wichtig für Laufzeitaktualisierungen von Themen. Bei dieser Einrichtung wird der Rasterhintergrund automatisch aktualisiert, wenn Benutzer in Oder zwischen Kontrastdesigns wechseln.

Bewährte Methoden

Verwenden Sie die folgenden Empfehlungen beim Anpassen von Kontrastdesignfarben in Ihrer App.

  • Testen Sie Ihre App in allen vier integrierten Kontrastdesigns, während sie ausgeführt wird.
  • Seien Sie konsistent.
  • Legen Sie HighContrastAdjustment auf None fest, wenn die Themenressourcen richtig definiert sind. Siehe Festlegen von HighContrastAdjustment auf None.
  • Farben inHighContrast nicht hartcodieren. Verwenden Sie SystemColorColor und ColorBrush Ressourcen. Siehe hartcodierte Farben.
  • Kombinieren Sie keine inkompatiblen Vordergrund-/Hintergrundpaare.
  • Wählen Sie nicht allein Ressourcen aufgrund der Ästhetik aus; Benutzer können Themenfarben ändern.
  • Verwenden SieSystemColorGrayTextColor nicht für sekundären Textkörper oder Hinweistext. Reservieren Sie sie für deaktivierte Inhalte.
  • Verwenden SieSystemColorHotlightColor nicht für etwas anderes als Hyperlinks.
WinUI 3-Katalogsymbol Die WinUI 3 Gallery-App enthält interaktive Beispiele für WinUI-Steuerelemente und -Features. Rufen Sie die App aus dem Microsoft Store ab, oder durchsuchen Sie den Quellcode auf GitHub.

Hartcodierte Farben

Plattformsteuerelemente bieten ein integriertes Kontrast-Themenverhalten, aber Anpassungen können es problemlos beeinträchtigen. Zwei häufige Fehlermodi sind hartcodierte Farben und falsche SystemColor-Kopplungen .

Im folgenden Codeausschnitt ist ein Rasterhintergrund auf #E6E6E6 (hellgrau) hartcodiert. Dies erzwingt denselben Hintergrund für alle Designs. Bei einem Kontrastdesign wie "Aquatic" kann Vordergrundtext auf Weiß umgestellt werden, während der Hintergrund hell bleibt, was zu einem schlechten oder unbrauchbaren Kontrast führt.

<Grid Background="#E6E6E6">

Verwenden Sie stattdessen die {ThemeResource}-Markuperweiterung, um Werte aus ThemeDictionaries in einem ResourceDictionary aufzulösen. Die automatische Laufzeitersetzung wird dadurch auf Grundlage des aktiven Benutzerdesigns ermöglicht.

<Grid Background="{ThemeResource BrandedPageBackgroundBrush}">

Ränder

Seiten, Bereiche, Popups und Leisten sollten in der Regel SystemColorWindowColor als Hintergrundbasislinie verwenden. Fügen Sie nur dort Rahmen mit reinen Kontrastthemen hinzu, wo Sie wichtige visuelle Grenzen bewahren müssen.

Tipp

Es wird empfohlen, 2px-Rahmen für transitorische Oberflächen wie Flyouts und Dialogfelder zu verwenden.

Wenn ein Navigationsbereich und eine Inhaltsseite dieselbe Hintergrundfarbe haben, ist häufig ein Rahmen nur für Kontrastzwecke erforderlich, um die Trennung aufrechtzuerhalten.

Ein Navigationsbereich, der vom Rest der Seite getrennt ist.

Listenelemente mit farbigem Text

Im Gegensatz zu kontrastierenden Designs verwenden ListView-ElementeSystemColorHighlightColor im Schwebe-, Drück- und ausgewähltem Zustand. Ein häufiger Fehler in komplexen Elementvorlagen besteht darin, dass der innere Inhalt nicht ordnungsgemäß umgekehrt wird, wodurch ausgewählte Zeilen nicht lesbar werden können.

Achten Sie darauf, TextBlock.Foreground direkt in einem DataTemplate für ListView festzulegen. ListViewItem legt "Foreground" für Zustandsübergänge fest, und geschachtelte TextBlock-Elemente sollten diesen Wert erben. Explizite Foreground Einstellungen unterbrechen diese Vererbungskette.

Komplexe Liste im hellen und aquatischen Design (achten Sie auf die nicht invertierte Textfarbe im HighContrast).

Sie können dies beheben, indem Sie Ressourcen für bedingten Stil in ThemeDictionaries definieren. Lassen Sie in HighContrast den expliziten Vordergrund-Setter weg, sodass die Vererbung das korrekte Inversionsverhalten wiederhergestellt.

Komplexe Liste im Design

Der folgende Codeausschnitt (aus einer App.xaml-Datei) zeigt eine Beispielsammlung von ThemeDictionaries in einer ListView-Datenvorlage.

<ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Default">
        <Style
            x:Key="SecondaryBodyTextBlockStyle"
            TargetType="TextBlock"
            BasedOn="{StaticResource BodyTextBlockStyle}">
            <Setter Property="Foreground" 
                Value="{StaticResource SystemControlForegroundBaseMediumBrush}" />
        </Style>
    </ResourceDictionary>

    <ResourceDictionary x:Key="Light">
        <Style
            x:Key="SecondaryBodyTextBlockStyle"
            TargetType="TextBlock"
            BasedOn="{StaticResource BodyTextBlockStyle}">
            <Setter Property="Foreground" 
                Value="{StaticResource SystemControlForegroundBaseMediumBrush}" />
        </Style>
    </ResourceDictionary>

    <ResourceDictionary x:Key="HighContrast">
        <!-- The Foreground Setter is omitted in HighContrast -->
        <Style
            x:Key="SecondaryBodyTextBlockStyle"
            TargetType="TextBlock"
            BasedOn="{StaticResource BodyTextBlockStyle}" />
    </ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>

<!-- Usage in your DataTemplate... -->
<DataTemplate>
    <StackPanel>
        <TextBlock Style="{StaticResource BodyTextBlockStyle}" Text="Double line list item" />

        <!-- Note how ThemeResource is used to reference the Style -->
        <TextBlock Style="{ThemeResource SecondaryBodyTextBlockStyle}" Text="Second line of text" />
    </StackPanel>
</DataTemplate>

Beispiele

WinUI 3-Katalogsymbol Die WinUI 3 Gallery-App enthält interaktive Beispiele für WinUI-Steuerelemente und -Features. Rufen Sie die App aus dem Microsoft Store ab, oder durchsuchen Sie den Quellcode auf GitHub.