Freigeben über


Fokusnavigation für Tastatur, Gamepad, Fernbedienung und Barrierefreiheitstools

Tastatur, Fernbedienung und D-Pad

Verwenden Sie die Fokusnavigation, um umfassende und konsistente Interaktionsfunktionen in Ihren Windows-Apps und benutzerdefinierten Steuerelementen für Tastaturbenutzer, Personen mit Behinderungen und anderen Anforderungen an die Barrierefreiheit sowie die 10-Fuß-Erfahrung von Fernsehbildschirmen und xbox One bereitzustellen.

Überblick

Die Fokusnavigation bezieht sich auf den zugrunde liegenden Mechanismus, mit dem Benutzer mithilfe einer Tastatur, eines Gamepads oder einer Fernbedienung mit der Benutzeroberfläche einer Windows-Anwendung navigieren und damit interagieren können.

Hinweis

Eingabegeräte werden in der Regel als Zeigegeräte wie Toucheingabe, Touchpad, Stift und Maus sowie nicht zeigende Geräte wie Tastatur, Gamepad und Fernbedienung klassifiziert.

In diesem Thema wird beschrieben, wie Sie eine Windows-Anwendung optimieren und benutzerdefinierte Interaktionsfunktionen für Benutzer erstellen, die auf nicht zeigenden Eingabetypen basieren.

Obwohl wir uns auf die Tastatureingabe für benutzerdefinierte Steuerelemente in Windows-Apps auf PCs konzentrieren, ist eine gut gestaltete Tastaturerfahrung auch für Softwaretastaturen, wie die berührungsbasierte Tastatur und die Bildschirmtastatur (On-Screen Keyboard, OSK), wichtig, um Barrierefreiheitstools wie die Windows-Sprachausgabe und die 10-Foot-Benutzererfahrung zu unterstützen.

Anleitungen zum Erstellen von benutzerdefinierten Oberflächen in Windows-Anwendungen für Zeigergeräte finden Sie unter Behandeln von Zeigereingaben .

Allgemeine Informationen zum Erstellen von Apps und Oberflächen für die Tastatur finden Sie unter Tastaturinteraktion.

Allgemeine Anleitungen

Nur die UI-Elemente, die eine Benutzerinteraktion erfordern, sollten die Fokusnavigation unterstützen. Elemente, die keine Aktion erfordern, z. B. statische Bilder, benötigen keinen Tastaturfokus. Bildschirmlesegeräte und ähnliche Barrierefreiheitstools kündigen diese statischen Elemente weiterhin an, auch wenn sie nicht in der Fokusnavigation enthalten sind.

Es ist wichtig zu beachten, dass die Fokusnavigation im Gegensatz zur Navigation mit einem Zeigergerät wie einer Maus oder Toucheingabe linear ist. Berücksichtigen Sie bei der Implementierung der Fokusnavigation, wie ein Benutzer mit Ihrer Anwendung interagiert und was die logische Navigation sein soll. In den meisten Fällen empfehlen wir, dass das benutzerdefinierte Fokusnavigationsverhalten dem bevorzugten Lesemuster der Benutzerkultur folgt.

Einige weitere Überlegungen zur Fokusnavigation sind:

  • Sind Steuerelemente logisch gruppiert?
  • Gibt es Gruppen von Steuerelementen mit größerer Bedeutung?
    • Wenn ja, enthalten diese Gruppen Untergruppen?
  • Erfordert das Layout eine benutzerdefinierte direktionale Navigation (Pfeiltasten) und Tab-Reihenfolge?

Das E-Book "Engineering Software for Accessibility " verfügt über ein hervorragendes Kapitel zum Entwerfen der logischen Hierarchie.

2D-direktionale Navigation für die Tastatur

Der innere 2D-Navigationsbereich eines Steuerelements oder einer Steuerelementgruppe wird als "direktionaler Bereich" bezeichnet. Wenn sich der Fokus auf dieses Objekt verschiebt, können die Tastaturpfeiltasten (links, rechts, oben und unten) verwendet werden, um zwischen untergeordneten Elementen innerhalb des Richtungsbereichs zu navigieren.

Direktionaler Bereich 2D Innerer Navigationsbereich oder direktionaler Bereich einer Steuerelementgruppe

Sie können die XYFocusKeyboardNavigation-Eigenschaft (die über mögliche Werte von Auto, Enabled oder Disabled verfügt) verwenden, um die innere 2D-Navigation mit den Tastaturpfeiltasten zu verwalten.

Hinweis

Die Tabulatorreihenfolge ist von dieser Eigenschaft nicht betroffen. Um eine verwirrende Navigation zu vermeiden, empfehlen wir, dass untergeordnete Elemente eines direktionalen Bereichs nicht explizit in der Tab-Navigation Ihrer Anwendung angegeben werden. Weitere Informationen zum Registerkartenverhalten für ein Element finden Sie in den Eigenschaften "UIElement.TabFocusNavigation " und "TabIndex ".

Auto (Standardverhalten)

Bei Festlegung auf "Automatisch" wird das direktionale Navigationsverhalten durch die Herkunft oder Vererbungshierarchie des Elements bestimmt. Wenn sich alle Vorgänger im Standardmodus befinden (auf Auto festgelegt), wird die direktionale Navigation mit der Tastatur nicht unterstützt.

Deaktiviert

Legen Sie "XYFocusKeyboardNavigation" auf "Deaktiviert" fest, um die direktionale Navigation auf das Steuerelement und dessen untergeordnete Elemente zu blockieren.

XYFocusKeyboardNavigation Verhalten bei Deaktivierung XYFocusKeyboardNavigation Verhalten bei Deaktivierung

In diesem Beispiel ist für das primäre StackPanel (ContainerPrimary) XYFocusKeyboardNavigation auf "Enabled" festgelegt. Alle untergeordneten Elemente erben diese Einstellung und können mit den Pfeiltasten navigiert werden. Die B3- und B4-Elemente befinden sich jedoch in einem sekundären StackPanel (ContainerSecondary), bei dem die XYFocusKeyboardNavigation auf Disabled gesetzt ist, was den primären Container außer Kraft setzt und die Pfeiltasten-Navigation sowohl auf sich selbst als auch zwischen seinen untergeordneten Elementen deaktiviert.

<Grid 
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
    TabFocusNavigation="Cycle">
    <Grid.RowDefinitions>
        <RowDefinition Height="40"/>
        <RowDefinition Height="75"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <TextBlock Name="KeyPressed"
                Grid.Row="0" 
                FontWeight="ExtraBold" 
                HorizontalTextAlignment="Center"
                TextWrapping="Wrap" 
                Padding="10" />
    <StackPanel Name="ContainerPrimary" 
                XYFocusKeyboardNavigation="Enabled" 
                KeyDown="ContainerPrimary_KeyDown" 
                Orientation="Horizontal" 
                BorderBrush="Green" 
                BorderThickness="2" 
                Grid.Row="1" 
                Padding="10" 
                MaxWidth="200">
        <Button Name="B1" 
                Content="B1" 
                GettingFocus="Btn_GettingFocus" />
        <Button Name="B2" 
                Content="B2" 
                GettingFocus="Btn_GettingFocus" />
        <StackPanel Name="ContainerSecondary" 
                    XYFocusKeyboardNavigation="Disabled" 
                    Orientation="Horizontal" 
                    BorderBrush="Red" 
                    BorderThickness="2">
            <Button Name="B3" 
                    Content="B3" 
                    GettingFocus="Btn_GettingFocus" />
            <Button Name="B4" 
                    Content="B4" 
                    GettingFocus="Btn_GettingFocus" />
        </StackPanel>
    </StackPanel>
</Grid>

Aktiviert

Legen Sie XYFocusKeyboardNavigation auf Enabled fest, um die 2D-direktionale Navigation zu einem Steuerelement und jedem seiner untergeordneten UIElement-Objekte zu unterstützen.

Bei Festlegung ist die Navigation mit den Pfeiltasten auf Elemente innerhalb des direktionalen Bereichs beschränkt. Die Registerkartennavigation ist nicht betroffen, da alle Steuerelemente über ihre Tabulatorreihenfolge zugänglich bleiben.

Aktiviertes Verhalten bei XYFocusKeyboardNavigation Aktiviertes Verhalten bei XYFocusKeyboardNavigation

In diesem Beispiel ist für das primäre StackPanel (ContainerPrimary) XYFocusKeyboardNavigation auf "Enabled" festgelegt. Alle untergeordneten Elemente erben diese Einstellung und können mit den Pfeiltasten navigiert werden. Die B3- und B4-Elemente befinden sich in einem sekundären StackPanel (ContainerSecondary), bei dem XYFocusKeyboardNavigation nicht festgelegt ist, was dann die primäre Containereinstellung erbt. Das B5-Element befindet sich nicht innerhalb eines deklarierten direktionalen Bereichs und unterstützt keine Pfeiltastennavigation, unterstützt jedoch das standardverhalten der Registerkartennavigation.

<Grid
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    TabFocusNavigation="Cycle">
    <Grid.RowDefinitions>
        <RowDefinition Height="40"/>
        <RowDefinition Height="100"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <TextBlock Name="KeyPressed"
               Grid.Row="0"
               FontWeight="ExtraBold"
               HorizontalTextAlignment="Center"
               TextWrapping="Wrap"
               Padding="10" />
    <StackPanel Grid.Row="1"
                Orientation="Horizontal"
                HorizontalAlignment="Center">
        <StackPanel Name="ContainerPrimary"
                    XYFocusKeyboardNavigation="Enabled"
                    KeyDown="ContainerPrimary_KeyDown"
                    Orientation="Horizontal"
                    BorderBrush="Green"
                    BorderThickness="2"
                    Padding="5" Margin="5">
            <Button Name="B1"
                    Content="B1"
                    GettingFocus="Btn_GettingFocus" Margin="5" />
            <Button Name="B2"
                    Content="B2"
                    GettingFocus="Btn_GettingFocus" />
            <StackPanel Name="ContainerSecondary"
                        Orientation="Horizontal"
                        BorderBrush="Red"
                        BorderThickness="2"
                        Margin="5">
                <Button Name="B3"
                        Content="B3"
                        GettingFocus="Btn_GettingFocus"
                        Margin="5" />
                <Button Name="B4"
                        Content="B4"
                        GettingFocus="Btn_GettingFocus"
                        Margin="5" />
            </StackPanel>
        </StackPanel>
        <Button Name="B5"
                Content="B5"
                GettingFocus="Btn_GettingFocus"
                Margin="5" />
    </StackPanel>
</Grid>

Sie können über mehrere Ebenen geschachtelter direktionaler Bereiche verfügen. Wenn alle übergeordneten Elemente die Option "XYFocusKeyboardNavigation" auf "Aktiviert" festgelegt haben, werden grenzen für den inneren Navigationsbereich ignoriert.

Hier ist ein Beispiel für zwei geschachtelte direktionale Bereiche in einem Element, das die 2D-direktionale Navigation nicht explizit unterstützt. In diesem Fall wird die Richtungstasten-Navigation zwischen den beiden geschachtelten Bereichen nicht unterstützt.

XYFocusKeyboardNavigation aktiviertes und geschachteltes Verhalten XYFocusKeyboardNavigation aktiviertes und geschachteltes Verhalten

Hier ist ein komplexeres Beispiel für drei geschachtelte direktionale Bereiche, in denen:

  • Wenn B1 den Fokus hat, kann nur B5 zu (und umgekehrt) navigiert werden, da es eine direktionale Bereichsgrenze gibt, an der XYFocusKeyboardNavigation auf "Deaktiviert" festgelegt ist, sodass B2, B3 und B4 mit den Pfeiltasten nicht erreichbar sind.
  • Wenn B2 den Fokus hat, kann nur B3 zu (und umgekehrt) navigiert werden, da die Begrenzung des direktionalen Bereichs die Pfeiltastennavigation zu B1, B4 und B5 verhindert.
  • Wenn B4 den Fokus hat, muss die TAB-TASTE verwendet werden, um zwischen Steuerelementen zu navigieren.

Aktivierte XYFocusKeyboardNavigation und komplexes geschachteltes Verhalten

XYFocusKeyboardNavigation aktiviert mit komplexem geschachteltem Verhalten

Registerkartennavigation

Während die Pfeiltasten für die 2D-direktionale Navigation für ein Steuerelement oder eine Steuerelementgruppe verwendet werden können, kann die TAB-TASTE verwendet werden, um zwischen allen Steuerelementen in einer Windows-Anwendung zu navigieren.

Alle interaktiven Steuerelemente unterstützen standardmäßig die Navigation mit der Tabulatortaste (die Eigenschaften IsEnabled und IsTabStop sind wahr), wobei die logische Tabulatorreihenfolge aus dem Layout der Steuerelemente in Ihrer Anwendung abgeleitet wird. Die Standardreihenfolge entspricht jedoch nicht unbedingt der visuellen Reihenfolge. Die tatsächliche Anzeigeposition hängt möglicherweise vom übergeordneten Layoutcontainer und bestimmten Eigenschaften ab, die Sie für die untergeordneten Elemente festlegen können, um das Layout zu beeinflussen.

Vermeiden Sie eine benutzerdefinierte Tabreihenfolge, bei der der Fokus in Ihrer Anwendung unkontrolliert springt. Beispielsweise sollte eine Liste von Steuerelementen in einem Formular eine Tabulatorreihenfolge aufweisen, die von oben nach unten und von links nach rechts fließt (je nach Gebietsschema).

In diesem Abschnitt wird beschrieben, wie diese Tab-Reihenfolge vollständig an Ihre App angepasst werden kann.

Legen Sie das Verhalten der Registerkartennavigation fest

Die TabFocusNavigation-Eigenschaft von UIElement gibt das Verhalten der Registerkartennavigation für die gesamte Objektstruktur (oder den direktionalen Bereich) an.

Hinweis

Verwenden Sie diese Eigenschaft anstelle der Control.TabNavigation-Eigenschaft für Objekte, die keine ControlTemplate zum Definieren ihrer Darstellung verwenden.

Um eine verwirrende Navigation zu vermeiden, wird empfohlen, dass untergeordnete Elemente eines direktionalen Bereichs nicht explizit in der Tabulator-Navigationsreihenfolge Ihrer Anwendung angegeben werden. Weitere Informationen zum Verhalten der Tabulatornavigation eines Elements finden Sie in den Eigenschaften UIElement.TabFocusNavigation und TabIndex.

Für Versionen, die älter als Windows 10 Creators Update (Build 10.0.15063) sind, wurden Registerkarteneinstellungen auf ControlTemplate-Objekte beschränkt. Weitere Informationen finden Sie unter "Control.TabNavigation".

TabFocusNavigation weist einen Wert vom Typ KeyboardNavigationMode mit den folgenden möglichen Werten auf (beachten Sie, dass diese Beispiele keine benutzerdefinierten Steuerelementgruppen sind und keine innere Navigation mit den Pfeiltasten erfordern):

  • Lokale (Standard) Registerkartenindizes werden in der lokalen Unterstruktur innerhalb des Containers erkannt. In diesem Beispiel lautet die Tabulatorreihenfolge B1, B2, B3, B4, B5, B6, B7, B1.

    Navigationsverhalten der Registerkarte 'Lokal'

    Navigationsverhalten der Registerkarte "Lokal"

  • Einmal Der Container und alle untergeordneten Elemente erhalten einmal den Fokus. In diesem Beispiel ist die Tab-Reihenfolge B1, B2, B7, B1 (die innere Navigation mit der Pfeiltaste wird ebenfalls veranschaulicht).

    Verhalten der Registerkartennavigation

    "Einmal"-Verhalten der Registerkartennavigation

  • Cycle
    Der Fokus wechselt zurück zum anfänglichen fokussierbaren Element innerhalb eines Containers. In diesem Beispiel ist die Tabulatorreihenfolge B1, B2, B3, B4, B5, B6, B2...

    Navigationsverhalten der Registerkarte

    Navigationsverhalten der Registerkarte "Zyklus"

Hier sehen Sie den Code für die vorherigen Beispiele (mit TabFocusNavigation ="Cycle").

<Grid 
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" 
    TabFocusNavigation="Cycle">
    <Grid.RowDefinitions>
        <RowDefinition Height="40"/>
        <RowDefinition Height="300"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <TextBlock Name="KeyPressed"
               Grid.Row="0" 
               FontWeight="ExtraBold" 
               HorizontalTextAlignment="Center"
               TextWrapping="Wrap" 
               Padding="10" />
    <StackPanel Name="ContainerPrimary"
                KeyDown="Container_KeyDown" 
                Orientation="Horizontal" 
                HorizontalAlignment="Center"
                BorderBrush="Green" 
                BorderThickness="2" 
                Grid.Row="1" 
                Padding="10" 
                MaxWidth="200">
        <Button Name="B1" 
                Content="B1" 
                GettingFocus="Btn_GettingFocus" 
                Margin="5"/>
        <StackPanel Name="ContainerSecondary" 
                    KeyDown="Container_KeyDown"
                    XYFocusKeyboardNavigation="Enabled" 
                    TabFocusNavigation ="Cycle"
                    Orientation="Vertical" 
                    VerticalAlignment="Center"
                    BorderBrush="Red" 
                    BorderThickness="2"
                    Padding="5" Margin="5">
            <Button Name="B2" 
                    Content="B2" 
                    GettingFocus="Btn_GettingFocus" 
                    Margin="5"/>
            <Button Name="B3" 
                    Content="B3" 
                    GettingFocus="Btn_GettingFocus" 
                    Margin="5"/>
            <Button Name="B4" 
                    Content="B4" 
                    GettingFocus="Btn_GettingFocus" 
                    Margin="5"/>
            <Button Name="B5" 
                    Content="B5" 
                    GettingFocus="Btn_GettingFocus" 
                    Margin="5"/>
            <Button Name="B6" 
                    Content="B6" 
                    GettingFocus="Btn_GettingFocus" 
                    Margin="5"/>
        </StackPanel>
        <Button Name="B7" 
                Content="B7" 
                GettingFocus="Btn_GettingFocus" 
                Margin="5"/>
    </StackPanel>
</Grid>

TabIndex

Verwenden Sie TabIndex , um die Reihenfolge anzugeben, in der Elemente den Fokus erhalten, wenn der Benutzer mithilfe der TAB-TASTE durch Steuerelemente navigiert. Ein Steuerelement mit einem niedrigeren Tab-Index erhält den Fokus vor einem Steuerelement mit einem höheren Tab-Index.

Wenn ein Steuerelement keinen TabIndex angegeben hat, wird ein höherer Indexwert als der aktuelle höchste Indexwert (und die niedrigste Priorität) aller interaktiven Steuerelemente in der visuellen Struktur zugewiesen, basierend auf dem Bereich.

Alle untergeordneten Elemente eines Steuerelements werden als Bereich betrachtet, und wenn eines dieser Elemente auch untergeordnete Elemente aufweist, werden sie als ein weiterer Bereich betrachtet. Jede Mehrdeutigkeit wird aufgelöst, indem das erste Element im visuellen Baum des Bereichs ausgewählt wird.

Um ein Steuerelement aus der Aktivierreihenfolge auszuschließen, legen Sie die IsTabStop-Eigenschaft auf "false" fest.

Überschreiben Sie die Standard-Tab-Reihenfolge durch Festlegen der TabIndex-Eigenschaft.

Hinweis

TabIndex funktioniert auf die gleiche Weise mit UIElement.TabFocusNavigation und Control.TabNavigation.

Hier zeigen wir, wie die Fokusnavigation von der TabIndex-Eigenschaft für bestimmte Elemente beeinflusst werden kann.

Navigationsregister

Tab-Navigation Lokal mit TabIndex-Verhalten

Im vorherigen Beispiel gibt es zwei Bereiche:

  • B1, Richtungsbereich (B2 - B6) und B7
  • Richtungsbereich (B2 - B6)

Wenn B3 (im direktionalen Bereich) den Fokus erhält, ändert sich der Umfang und die Tabstoppnavigation wechselt in den direktionalen Bereich, wo der beste Kandidat für den nachfolgenden Fokus identifiziert wird. In diesem Fall folgt B2, gefolgt von B4, B5 und B6. Der Bereich ändert sich dann erneut, und der Fokus wird auf B1 verschoben.

Hier sehen Sie den Code für dieses Beispiel.

<Grid
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    TabFocusNavigation="Cycle">
    <Grid.RowDefinitions>
        <RowDefinition Height="40"/>
        <RowDefinition Height="300"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <TextBlock Name="KeyPressed"
               Grid.Row="0"
               FontWeight="ExtraBold"
               HorizontalTextAlignment="Center"
               TextWrapping="Wrap"
               Padding="10" />
    <StackPanel Name="ContainerPrimary"
                KeyDown="Container_KeyDown"
                Orientation="Horizontal"
                HorizontalAlignment="Center"
                BorderBrush="Green"
                BorderThickness="2"
                Grid.Row="1"
                Padding="10"
                MaxWidth="200">
        <Button Name="B1"
                Content="B1"
                TabIndex="1"
                ToolTipService.ToolTip="TabIndex = 1"
                GettingFocus="Btn_GettingFocus"
                Margin="5"/>
        <StackPanel Name="ContainerSecondary"
                    KeyDown="Container_KeyDown"
                    TabFocusNavigation ="Local"
                    Orientation="Vertical"
                    VerticalAlignment="Center"
                    BorderBrush="Red"
                    BorderThickness="2"
                    Padding="5" Margin="5">
            <Button Name="B2"
                    Content="B2"
                    GettingFocus="Btn_GettingFocus"
                    Margin="5"/>
            <Button Name="B3"
                    Content="B3"
                    TabIndex="3"
                    ToolTipService.ToolTip="TabIndex = 3"
                    GettingFocus="Btn_GettingFocus"
                    Margin="5"/>
            <Button Name="B4"
                    Content="B4"
                    GettingFocus="Btn_GettingFocus"
                    Margin="5"/>
            <Button Name="B5"
                    Content="B5"
                    GettingFocus="Btn_GettingFocus"
                    Margin="5"/>
            <Button Name="B6"
                    Content="B6"
                    GettingFocus="Btn_GettingFocus"
                    Margin="5"/>
        </StackPanel>
        <Button Name="B7"
                Content="B7"
                TabIndex="2"
                ToolTipService.ToolTip="TabIndex = 2"
                GettingFocus="Btn_GettingFocus"
                Margin="5"/>
    </StackPanel>
</Grid>

2D-direktionale Navigation für Tastatur, Gamepad und Fernbedienung

Eingabetypen ohne Zeiger wie Tastatur, Gamepad, Fernbedienung und Barrierefreiheitstools wie Windows-Sprachausgabe teilen einen gemeinsamen, zugrunde liegenden Mechanismus für die Navigation und Interaktion mit der Benutzeroberfläche Ihrer Windows-Anwendung.

In diesem Abschnitt wird erläutert, wie Sie eine bevorzugte Navigationsstrategie angeben und die Fokusnavigation in Ihrer Anwendung durch eine Reihe von Navigationsstrategieeigenschaften optimieren, die alle fokusbasierten, nicht zeigerbasierten Eingabetypen unterstützen.

Allgemeine Informationen zum Erstellen von Apps und Erfahrungen für Xbox/TV finden Sie unter Tastaturinteraktion, Entwerfen für Xbox und TV sowie Gamepad- und Fernbedienungsinteraktionen.

Navigationsstrategien gelten für Tastatur, Gamepad, Fernbedienung und verschiedene Barrierefreiheitstools.

Mit den folgenden Eigenschaften der Navigationsstrategie können Sie beeinflussen, welches Steuerelement den Fokus erhält, wenn eine Pfeiltaste, eine Steuerkreuztaste (D-Pad) oder eine ähnliche Taste gedrückt wird.

  • XYFocusUpNavigationStrategy
  • XYFocusDownNavigationStrategy
  • XYFocusLeftNavigationStrategy
  • XYFocusRightNavigationStrategy

Diese Eigenschaften weisen mögliche Werte von Auto (Standard), NavigationDirectionDistance, Projection oder RectilinearDistance auf.

Bei Festlegung auf "Auto" basiert das Verhalten des Elements auf den Vorgängern des Elements. Wenn alle Elemente auf "Automatisch" festgelegt sind, wird Projektion verwendet.

Hinweis

Andere Faktoren, z. B. das zuvor fokussierte Element oder die Nähe zur Achse der Navigationsrichtung, können das Ergebnis beeinflussen.

Projection

Die Projektionsstrategie verschiebt den Fokus auf das erste Element, das aufgetreten ist, wenn der Rand des aktuell fokussierten Elements in Richtung Navigation projiziert wird.

In diesem Beispiel wird jede Fokusnavigationsrichtung auf "Projektion" festgelegt. Beachten Sie, wie sich der Fokus von B1 auf B4 bewegt, um B3 zu umgehen. Dies liegt daran, dass sich B3 nicht in der Projektionszone befindet. Beachten Sie auch, dass ein Fokuskandidat nicht identifiziert wird, wenn er von B1 nach links bewegt wird. Dies liegt daran, dass die Position von B2 relativ zu B1 B3 als Kandidat eliminiert. Wenn B3 in der gleichen Zeile wie B2 war, wäre es ein lebensfähiger Kandidat für die linke Navigation. B2 ist ein lebensfähiger Kandidat aufgrund seiner unbehinderten Nähe zur Navigationsachsenrichtung.

Projektionsnavigationsstrategie

Projektionsnavigationsstrategie

Die NavigationDirectionDistance-Strategie verschiebt den Fokus auf das Element, das der Achse der Navigationsrichtung am nächsten kommt.

Der Rand des begrenzenden Rechtecks, das der Navigationsrichtung entspricht, wird erweitert und ausgerichtet, um Zielkandidaten zu identifizieren. Das erste gefundene Element wird als Ziel identifiziert. Bei mehreren Kandidaten wird das nächstgelegene Element als Ziel identifiziert. Wenn noch mehrere Kandidaten vorhanden sind, wird das oberste/äußerst linke Element als Kandidat identifiziert.

Navigationsstrategie mit NavigationDirectionDistance

NavigationDirectionDistance-Navigationsstrategie

RectilinearDistance

Die RectilinearDistance-Strategie verschiebt den Fokus auf das nächstgelegene Element basierend auf der 2D-Rectilinear-Entfernung (Taxicab-Geometrie).

Die Summe des primären und sekundären Abstands zu jedem potenziellen Kandidaten wird verwendet, um den besten Kandidaten zu identifizieren. Bei einem Gleichstand wird das erste Element links ausgewählt, wenn die angeforderte Richtung nach oben oder unten ist. Das erste Element oben wird ausgewählt, wenn die angeforderte Richtung links oder rechts ist.

RectilinearDistance-Navigationsstrategie

RectilinearDistance-Navigationsstrategie

In dieser Abbildung wird gezeigt, dass B3 der Fokuskandidat "RectilinearDistance" ist, wenn B1 den Fokus hat und die angeforderte Richtung "nach unten" ist. Dies basiert auf den folgenden Berechnungen für dieses Beispiel:

  • Abstand (B1, B3, Down) ist 10 + 0 = 10
  • Abstand (B1, B2, Nach unten) ist 0 + 40 = 30
  • Abstand (B1, D, Unten) ist 30 + 0 = 30