Fokusnavigation für Tastatur, Gamepad, Fernbedienung und Barrierefreiheitstools
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.
Übersicht
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 Bildschirmtastatur und die Bildschirmtastatur (On-Screen Keyboard, OSK) wichtig, die Unterstützung von Barrierefreiheitstools wie der Windows-Sprachausgabe und die Unterstützung der 10-Fuß-Erfahrung.
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 Hinweise
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. Bildschirmsprachausgaben und ähnliche Barrierefreiheitstools geben 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 wird empfohlen, benutzerdefiniertes Fokusnavigationsverhalten dem bevorzugten Lesemuster der Benutzerkultur zu folgen.
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 aktivierreihenfolge?
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, nach oben und unten) verwendet werden, um zwischen untergeordneten Elementen innerhalb des direktionalen Bereichs zu navigieren.
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 Aktivierreihenfolge ist von dieser Eigenschaft nicht betroffen. Um eine verwirrende Navigation zu vermeiden, empfehlen wir, dass untergeordnete Elemente eines direktionalen Bereichs nicht explizit in der Aktivierreihenfolge 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.
Disabled
Legen Sie "XYFocusKeyboardNavigation " auf "Deaktiviert " fest, um die direktionale Navigation auf das Steuerelement und dessen untergeordnete Elemente zu blockieren.
XYFocusKeyboardNavigation deaktiviertes Verhalten
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 zu navigieren. Die B3- und B4-Elemente befinden sich jedoch in einem sekundären StackPanel (ContainerSecondary), wobei XYFocusKeyboardNavigation auf "Disabled" festgelegt ist. Dadurch wird der primäre Container außer Kraft gesetzt und die Navigation mit Pfeiltasten auf sich selbst und zwischen den 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 die Hierarchie der Aktivierreihenfolge zugänglich bleiben.
XYFocusKeyboardNavigation aktiviertes Verhalten
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 zu navigieren. 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 direktionale Navigation zwischen den beiden geschachtelten Bereichen nicht unterstützt.
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.
XYFocusKeyboardNavigation aktiviertes und komplexes geschachteltes 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 die Tabulatortastennavigation standardmäßig (IsEnabled- und IsTabStop-Eigenschaft sind wahr), wobei die logische Aktivierreihenfolge vom Steuerelementlayout in Ihrer Anwendung abgeleitet ist. 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 Aktivierreihenfolge, bei der der Fokus in Ihrer Anwendung umherspringt. Beispielsweise sollte eine Liste von Steuerelementen in einem Formular eine Aktivierreihenfolge aufweisen, die von oben nach unten und von links nach rechts fließt (je nach Gebietsschema).
In diesem Abschnitt wird beschrieben, wie diese Aktivierreihenfolge vollständig an Ihre App angepasst werden kann.
Festlegen des Verhaltens der Registerkartennavigation
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.
Wie im vorherigen Abschnitt erwähnt, wird empfohlen, untergeordnete Elemente eines direktionalen Bereichs nicht explizit in der Aktivierreihenfolge Ihrer Anwendung anzugeben, um eine verwirrende Navigation zu vermeiden. Weitere Informationen zum Registerkartenverhalten für ein Element finden Sie unter " UIElement.TabFocusNavigation" und den TabIndex-Eigenschaften .
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 Aktivierreihenfolge B1, B2, B3, B4, B5, B6, B7, B1.
Verhalten der Registerkartennavigation "Lokal"
Sobald der Container und alle untergeordneten Elemente den Fokus einmal erhalten. In diesem Beispiel ist die Aktivierreihenfolge B1, B2, B7, B1 (innere Navigation mit Pfeiltaste wird ebenfalls veranschaulicht).
Verhalten der Registerkartennavigation "Einmal"
Zyklus
Der Fokus wechselt zurück zum anfänglichen fokussierbaren Element innerhalb eines Containers. In diesem Beispiel ist die Aktivierreihenfolge B1, B2, B3, B4, B5, B6, B2...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 Registerkartenindex erhält den Fokus vor einem Steuerelement mit einem höheren 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 anderer Bereich betrachtet. Jede Mehrdeutigkeit wird aufgelöst, indem das erste Element in der visuellen Struktur des Bereichs ausgewählt wird.
Um ein Steuerelement aus der Aktivierreihenfolge auszuschließen, legen Sie die IsTabStop-Eigenschaft auf "false" fest.
Überschreiben Sie die Standardregisterkartenreihenfolge, indem Sie die TabIndex-Eigenschaft festlegen.
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.
Registerkartennavigation "Lokal" mit TabIndex-Verhalten
Im vorherigen Beispiel gibt es zwei Bereiche:
- B1, Direktionalbereich (B2 - B6) und B7
- Richtungsbereich (B2 - B6)
Wenn B3 (im direktionalen Bereich) den Fokus erhält, wechselt der Bereich und die Tabstoppnavigation in den direktionalen Bereich, in dem 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
Navigationsstrategien gelten für Tastatur, Gamepad, Fernbedienung und verschiedene Barrierefreiheitstools.
Mit den folgenden Navigationsstrategieeigenschaften können Sie beeinflussen, welches Steuerelement den Fokus basierend auf der Pfeiltaste, der Steuerkreuztaste (D-Pad) oder ähnlich gedrückt erhält.
- 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.
Projektion
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 unstrukturierten Nähe zur Achse der Navigationsrichtung.
Projektionsnavigationsstrategie
NavigationDirectionDistance
Die NavigationDirectionDistance-Strategie verschiebt den Fokus auf das Element, das der Achse der Navigationsrichtung am nächsten kommt.
Der Rand des umgebenden Rechtecks, das der Navigationsrichtung entspricht, wird erweitert und projiziert , um Kandidatenziele 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.
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 Abstands und der sekundäre Abstand zu jedem potenziellen Kandidaten wird verwendet, um das beste Candidat zu identifizieren. In einer Verknüpfung wird das erste Element links ausgewählt, wenn die angeforderte Richtung nach oben oder unten ist und das erste Element oben ausgewählt wird, wenn die angeforderte Richtung links oder rechts ist.
RectilinearDistance-Navigationsstrategie
In dieser Abbildung wird gezeigt, wie B1 den Fokus hat und nach unten die angeforderte Richtung ist, B3 der Fokuskandidat "RectilinearDistance". Dies basiert auf den folgenden Berechnungen für dieses Beispiel:
- Abstand (B1, B3, Unten) ist 10 + 0 = 10
- Abstand (B1, B2, Nach unten) ist 0 + 40 = 30
- Abstand (B1, D, Nach unten) ist 30 + 0 = 30
Verwandte Artikel
Windows developer