Freigeben über


Interaktionen mit Gamepads und Fernbedienungen

Tastatur- und Gamepadbild

Viele Interaktionsfunktionen werden zwischen Gamepad, Fernbedienung und Tastatur gemeinsam genutzt.

Erstellen Sie Interaktionserfahrungen in Ihren Windows-Anwendungen, die sicherstellen, dass Ihre App sowohl über die herkömmlichen Eingabetypen von PCs, Laptops und Tablets (Maus, Tastatur, Toucheingabe usw.) als auch über die Eingabetypen, die für fernseh- und Xbox 10-Fuß-Erfahrung typisch sind, wie z. B. gamepad und Fernbedienung, verfügbar ist.

Allgemeine Designanleitungen für Windows-Anwendungen in der 10-Fuß-Erfahrung finden Sie unter Entwerfen für Xbox und TV.

Überblick

In diesem Thema wird erläutert, was Sie in Ihrem Interaktionsdesign berücksichtigen sollten (oder was Sie nicht berücksichtigen müssen, wenn die Plattform dies für Sie übernimmt), sowie Anleitungen, Empfehlungen und Vorschläge zum Erstellen von Windows-Anwendungen gegeben, die unabhängig von Gerät, Eingabetyp oder Benutzerfähigkeiten und -vorlieben mit Freude genutzt werden können.

Die Anwendung sollte in der 2-Fuß-Umgebung genauso intuitiv und einfach sein wie in der 10-Fuß-Umgebung (und umgekehrt). Unterstützen Sie die bevorzugten Geräte des Benutzers, machen Sie den Benutzeroberflächenfokus klar und unverkennbar, ordnen Sie Inhalte so an, dass die Navigation konsistent und vorhersehbar ist, und geben Sie Benutzern den kürzesten Weg, den sie tun möchten.

Hinweis

Die meisten Codeausschnitte in diesem Thema sind in XAML/C# enthalten; Die Prinzipien und Konzepte gelten jedoch für alle Windows-Apps. Wenn Sie eine HTML/JavaScript-Windows-App für Xbox entwickeln, schauen Sie sich die hervorragende TVHelpers-Bibliothek auf GitHub an.

Optimieren Sie für 2-Fuß- und 10-Fuß-Erfahrungen

Es wird mindestens empfohlen, Ihre Anwendungen zu testen, um sicherzustellen, dass sie sowohl in 2-Fuß- als auch in 10-Fuß-Szenarien gut funktionieren, und dass alle Funktionen auffindbar und für das Xbox-Gamepad und die Fernbedienung zugänglich sind.

Hier sind einige weitere Möglichkeiten, wie Sie Ihre App sowohl für die Verwendung in 2-Fuß- als auch in 10-Fuß-Erlebnissen und mit allen Eingabegeräten optimieren können (jeweils mit Verweis auf den entsprechenden Abschnitt in diesem Thema).

Hinweis

Da Xbox-Gamepads und Fernbedienungen viele Windows-Tastaturverhalten und -umgebungen unterstützen, sind diese Empfehlungen für beide Eingabetypen geeignet. Weitere Informationen zur Tastatur finden Sie unter Tastaturinteraktionen .

Merkmal Description
XY-Fokusnavigation und Interaktion Mit der XY-Fokusnavigation kann der Benutzer in der Benutzeroberfläche Ihrer App navigieren. Dies beschränkt den Benutzer jedoch auf die Navigation nach oben, unten, links und rechts. Empfehlungen für diesen Umgang und andere Überlegungen sind in diesem Abschnitt beschrieben.
Mausmodus Die XY-Fokusnavigation ist für einige Arten von Anwendungen, z. B. Karten oder Zeichnungs- und Mal-Apps, nicht praktisch oder sogar möglich. In diesen Fällen können Benutzer im Mausmodus frei mit einem Gamepad oder einer Fernbedienung navigieren, genau wie eine Maus auf einem PC.
Fokus-Visualisierung Der visuelle Fokus ist ein Rahmen, der das aktuell fokussierte UI-Element hervorhebt. Dies hilft dem Benutzer, die Benutzeroberfläche, mit der er navigiert oder interagiert, schnell zu identifizieren.
Fokusengagement Die Fokusaktivierung erfordert, dass der Benutzer die A/Select-Taste auf einem Gamepad oder einer Fernbedienung drückt, wenn ein UI-Element den Fokus hat, um mit ihr zu interagieren.
Hardwaretasten Das Gamepad und die Fernbedienung bieten sehr unterschiedliche Tasten und Konfigurationen.

Gamepad und Remotesteuerung

So wie Tastatur und Maus für den PC und Touch für Smartphone und Tablet, sind Gamepad und Fernbedienung die wichtigsten Eingabegeräte für das 10-Fuß-Benutzererlebnis. In diesem Abschnitt wird erläutert, was die Hardwaretasten sind und was sie tun. Im XY-Fokusnavigations- und Interaktions- undMausmodus erfahren Sie, wie Sie Ihre App bei Verwendung dieser Eingabegeräte optimieren.

Die Qualität der Funktionalität des Gamepads und der Fernbedienung, die Sie direkt beim Auspacken erhalten, hängt davon ab, wie gut die Tastatur in Ihrer App unterstützt wird. Eine gute Möglichkeit, um sicherzustellen, dass Ihre App gut mit Gamepad/Fernbedienung funktioniert, besteht darin, sicherzustellen, dass sie gut mit der Tastatur auf dem PC funktioniert, und testen Sie dann mit Gamepad/Fernbedienung, um Schwachstellen auf der Benutzeroberfläche zu finden.

Hardwaretasten

In diesem Dokument werden Schaltflächen mit den im folgenden Diagramm angegebenen Namen bezeichnet.

Diagramm mit Gamepad- und Remoteschaltflächen

Wie Sie aus dem Diagramm sehen können, gibt es einige Schaltflächen, die auf Gamepads unterstützt werden, die auf der Fernbedienung nicht unterstützt werden, und umgekehrt. Sie können zwar Schaltflächen verwenden, die nur auf einem Eingabegerät unterstützt werden, um die Navigation auf der Benutzeroberfläche zu beschleunigen, beachten Sie jedoch, dass die Verwendung für kritische Interaktionen zu einer Situation führen kann, in der der Benutzer nicht mit bestimmten Teilen der Benutzeroberfläche interagieren kann.

In der folgenden Tabelle sind alle Hardwareschaltflächen aufgeführt, die von Windows-Apps unterstützt werden und welche Eingabegeräte sie unterstützen.

Button Gamepad Remotesteuerung
A/Auswahl-Taste Yes Yes
Schaltfläche "B/Zurück" Yes Yes
Steuerkreuz (D-Pad) Yes Yes
Menü-Taste Yes Yes
Schaltfläche "Ansicht" Yes Yes
X- und Y-Schaltflächen Yes Nein
Linker Stick Yes Nein
Rechtsknüppel Yes Nein
Linker und rechter Trigger Yes Nein
Linke und rechte Bumper Yes Nein
OneGuide-Schaltfläche Nein Yes
Schaltfläche "Lautstärke" Nein Yes
Kanalschaltfläche Nein Yes
Schaltflächen für Mediensteuerelemente Nein Yes
Schaltfläche "Stummschalten" Nein Yes

Integrierte Schaltflächenunterstützung

UWP ordnet vorhandene Tastatureingabeverhalten automatisch Gamepad- und Fernbedienungseingaben zu. In der folgenden Tabelle sind diese integrierten Zuordnungen aufgeführt.

Tastatur Gamepad/Fernbedienung
Pfeiltasten D-Pad (auch linker Stick am Gamecontroller)
Leertaste A/Auswahl-Taste
Eingeben A/Auswahl-Taste
Flucht B/Zurück-Taste*

*Wenn weder die KeyDown - noch keyUp-Ereignisse für die B-Schaltfläche von der App behandelt werden, wird das SystemNavigationManager.BackRequested-Ereignis ausgelöst, was zu einer Rückwärtsnavigation innerhalb der App führen sollte. Sie müssen dies jedoch selbst implementieren, wie im folgenden Codeausschnitt:

// This code goes in the MainPage class

public MainPage()
{
    this.InitializeComponent();

    // Handling Page Back navigation behaviors
    SystemNavigationManager.GetForCurrentView().BackRequested +=
        SystemNavigationManager_BackRequested;
}

private void SystemNavigationManager_BackRequested(
    object sender,
    BackRequestedEventArgs e)
{
    if (!e.Handled)
    {
        e.Handled = this.BackRequested();
    }
}

public Frame AppFrame { get { return this.Frame; } }

private bool BackRequested()
{
    // Get a hold of the current frame so that we can inspect the app back stack
    if (this.AppFrame == null)
        return false;

    // Check to see if this is the top-most page on the app back stack
    if (this.AppFrame.CanGoBack)
    {
        // If not, set the event to handled and go back to the previous page in the
        // app.
        this.AppFrame.GoBack();
        return true;
    }
    return false;
}

Hinweis

Wenn die B-Schaltfläche verwendet wird, um zurück zu wechseln, zeigen Sie keine Schaltfläche "Zurück" auf der Benutzeroberfläche an. Wenn Sie eine Navigationsansicht verwenden, wird die Schaltfläche "Zurück" automatisch ausgeblendet. Weitere Informationen zur Rückwärtsnavigation finden Sie unter Navigationsverlauf und Rückwärtsnavigation für Windows-Apps.

Windows-Apps auf Xbox One unterstützen auch das Drücken der Menüschaltfläche , um Kontextmenüs zu öffnen. Weitere Informationen finden Sie unter CommandBar und ContextFlyout.

Accelerator-Unterstützung

Aktionsschaltflächen sind Schaltflächen, die verwendet werden können, um die Navigation in einer Benutzeroberfläche zu beschleunigen. Diese Schaltflächen können jedoch für ein bestimmtes Eingabegerät eindeutig sein. Denken Sie daher daran, dass nicht alle Benutzer diese Funktionen verwenden können. Tatsächlich ist das Gamepad derzeit das einzige Eingabegerät, das Beschleunigerfunktionen für Windows-Apps auf der Xbox One unterstützt.

In der folgenden Tabelle sind die in die UWP integrierte Beschleuniger-Unterstützung sowie die Unterstützung aufgeführt, die Sie selbst implementieren können. Nutzen Sie diese Verhaltensweisen in Ihrer benutzerdefinierten Benutzeroberfläche, um eine konsistente und benutzerfreundliche Benutzererfahrung zu ermöglichen.

Interaktion Tastatur/Maus Gamepad Eingebaut für: Empfohlen für:
Bild auf/ab Bild auf/ab Linker/rechter Auslöser CalendarView, ListBox, ListViewBase, ListView, ScrollViewerSelector, LoopingSelector, ComboBox, FlipView Ansichten, die den vertikalen Bildlauf unterstützen
Seite links/rechts Nichts Linke/rechte Stoßstangen ListBox, ListViewBase, ListView, ScrollViewer, Selector, LoopingSelector, FlipView Ansichten, die horizontalen Bildlauf unterstützen
Vergrößern/Verkleineren STRG+/- Links-/Rechtstrigger Nichts ScrollViewer, Ansichten, die das Vergrößern und Verkleinen unterstützen
Navigationsbereich öffnen/schließen Nichts Ansicht Nichts Navigationsbereiche
Suche Nichts Schaltfläche "Y" Nichts Verknüpfung zur Hauptsuchfunktion in der App
Kontextmenü öffnen Klicken Sie mit der rechten Maustaste auf Menü-Taste ContextFlyout Kontextmenüs

XY-Fokusnavigation und Interaktion

Wenn Ihre App die korrekte Fokusnavigation für die Tastatur unterstützt, lässt sich dies gut auf Gamepad und Fernbedienung übertragen. Die Navigation mit den Pfeiltasten wird dem D-Pad (sowie dem linken Stick auf gamepad) zugeordnet, und die Interaktion mit UI-Elementen wird der EINGABETASTE/Auswahltaste zugeordnet (siehe Gamepad und Fernbedienung).

Viele Ereignisse und Eigenschaften werden sowohl von der Tastatur als auch vom Gamepad verwendet – sie lösen sowohl KeyDown- als auch KeyUp-Ereignisse aus, und beide navigieren nur zu Steuerelementen, die die Eigenschaften IsTabStop="True" und Visibility="Visible" haben. Anleitungen zum Tastaturentwurf finden Sie unter Tastaturinteraktionen.

Wenn die Tastaturunterstützung ordnungsgemäß implementiert ist, funktioniert Ihre App vernünftigerweise. Es kann jedoch einige zusätzliche Arbeit geben, um jedes Szenario zu unterstützen. Überlegen Sie sich die spezifischen Anforderungen Ihrer App, um die bestmögliche Benutzererfahrung zu bieten.

Von Bedeutung

Der Mausmodus ist für Windows-Apps, die auf Xbox One ausgeführt werden, standardmäßig aktiviert. Um den Mausmodus zu deaktivieren und die XY-Fokusnavigation zu aktivieren, legen Sie fest Application.RequiresPointerMode=WhenRequested.

Debuggen von Fokusproblemen

Die FocusManager.GetFocusedElement-Methode teilt Ihnen mit, welches Element derzeit den Fokus hat. Dies ist nützlich für Situationen, in denen die Position des Fokusvisuals möglicherweise nicht offensichtlich ist. Sie können diese Informationen wie folgt im Visual Studio-Ausgabefenster protokollieren:

page.GotFocus += (object sender, RoutedEventArgs e) =>
{
    FrameworkElement focus = FocusManager.GetFocusedElement() as FrameworkElement;
    if (focus != null)
    {
        Debug.WriteLine("got focus: " + focus.Name + " (" +
            focus.GetType().ToString() + ")");
    }
};

Es gibt drei häufige Gründe, warum die XY-Navigation möglicherweise nicht wie erwartet funktioniert:

  • Die IsTabStop - oder Visibility-Eigenschaft ist falsch festgelegt.
  • Das Steuerelement, das den Fokus erhält, ist tatsächlich größer als Sie denken – XY-Navigation betrachtet die Gesamtgröße des Steuerelements (ActualWidth und ActualHeight), nicht nur den Teil des Steuerelements, der etwas Interessantes rendert.
  • Ein fokussierbares Steuerelement befindet sich über einem anderen. Die XY-Navigation unterstützt keine Steuerelemente, die sich überlappen.

Wenn die XY-Navigation nach der Behebung dieser Probleme immer noch nicht wie erwartet funktioniert, können Sie manuell auf das Element verweisen, das Sie mithilfe der unter Außerkraftsetzung der Standardnavigation beschriebenen Methode fokussieren möchten.

Wenn die XY-Navigation wie beabsichtigt funktioniert, aber keine Fokusanzeige angezeigt wird, kann eine der folgenden Probleme die Ursache sein:

  • Sie haben das Steuerelement neu erstellt und keine Fokusanzeige einbezogen. Setzen Sie UseSystemFocusVisuals="True" oder fügen Sie einen visuellen Fokus manuell hinzu.
  • Sie haben den Fokus durch Aufrufen Focus(FocusState.Pointer) verschoben. Der FocusState-Parameter steuert, was mit dem visuellen Fokus geschieht. Im Allgemeinen sollten Sie dies auf FocusState.Programmatic festlegen, wodurch die Fokusanzeige sichtbar bleibt, wenn sie vorher sichtbar war, und verborgen, wenn sie vorher verborgen war.

Der Rest dieses Abschnitts enthält ausführliche Informationen zu allgemeinen Entwurfsproblemen bei der Verwendung der XY-Navigation und bietet verschiedene Möglichkeiten, diese zu lösen.

Nicht zugängliche Benutzeroberfläche

Da die XY-Fokusnavigation den Benutzer auf die Bewegung nach oben, unten, links und rechts beschränkt, können Sie szenarien verwenden, in denen Teile der Benutzeroberfläche nicht zugänglich sind. Das folgende Diagramm zeigt ein Beispiel für die Art des UI-Layouts, das die XY-Fokusnavigation nicht unterstützt. Beachten Sie, dass das Element in der Mitte nicht über Gamepad/Fernbedienung zugegriffen werden kann, da die vertikale und horizontale Navigation priorisiert wird und das mittlere Element nie hoch genug Priorität hat, um den Fokus zu erhalten.

Elemente in vier Ecken mit nicht zugänglichem Element in der Mitte

Wenn das Neuanordnen der Benutzeroberfläche aus irgendeinem Grund nicht möglich ist, verwenden Sie eine der im nächsten Abschnitt erläuterten Techniken, um das Standardfokusverhalten außer Kraft zu setzen.

Überschreiben der Standardnavigation

Während die universelle Windows-Plattform versucht, sicherzustellen, dass die D-Pad-/linke Sticknavigation für den Benutzer sinnvoll ist, kann es nicht garantieren, dass das Verhalten für die Absichten Ihrer App optimiert ist. Die beste Möglichkeit, sicherzustellen, dass die Navigation für Ihre App optimiert ist, besteht darin, sie mit einem Gamepad zu testen und zu bestätigen, dass auf jedes UI-Element der Benutzer in einer Weise zugegriffen werden kann, die für die Szenarien Ihrer App sinnvoll ist. Falls die Szenarien Ihrer App ein Verhalten aufrufen, das nicht über die bereitgestellte XY-Fokusnavigation erreicht wird, sollten Sie die Empfehlungen in den folgenden Abschnitten befolgen und/oder das Verhalten außer Kraft setzen, um den Fokus auf ein logisches Element zu setzen.

Der folgende Codeausschnitt zeigt, wie Sie das XY-Fokusnavigationsverhalten außer Kraft setzen können:

<StackPanel>
    <Button x:Name="MyBtnLeft"
            Content="Search" />
    <Button x:Name="MyBtnRight"
            Content="Delete"/>
    <Button x:Name="MyBtnTop"
            Content="Update" />
    <Button x:Name="MyBtnDown"
            Content="Undo" />
    <Button Content="Home"  
            XYFocusLeft="{x:Bind MyBtnLeft}"
            XYFocusRight="{x:Bind MyBtnRight}"
            XYFocusDown="{x:Bind MyBtnDown}"
            XYFocusUp="{x:Bind MyBtnTop}" />
</StackPanel>

Wenn sich der Fokus in diesem Fall auf der Home Schaltfläche befindet und der Benutzer nach links navigiert, wechselt der Fokus zur MyBtnLeft Schaltfläche. Wenn der Benutzer nach rechts navigiert, wird der Fokus auf die MyBtnRight Schaltfläche verschoben usw.

Um zu verhindern, dass sich der Fokus von einem Steuerelement in einer bestimmten Richtung bewegt, verwenden Sie die XYFocus* Eigenschaft, um ihn auf dasselbe Steuerelement zu zeigen:

<Button Name="HomeButton"  
        Content="Home"  
        XYFocusLeft ="{x:Bind HomeButton}" />

Mithilfe dieser XYFocus Eigenschaften kann ein übergeordnetes Steuerelement auch die Navigation seiner untergeordneten Elemente erzwingen, wenn sich der nächste Fokuskandidat außerhalb des visuellen Baums befindet, es sei denn, das untergeordnete Element, das den Fokus hat, verwendet dieselbe XYFocus Eigenschaft.

<StackPanel Orientation="Horizontal" Margin="300,300">
    <UserControl XYFocusRight="{x:Bind ButtonThree}">
        <StackPanel>
            <Button Content="One"/>
            <Button Content="Two"/>
        </StackPanel>
    </UserControl>
    <StackPanel>
        <Button x:Name="ButtonThree" Content="Three"/>
        <Button Content="Four"/>
    </StackPanel>
</StackPanel>

Wenn sich der Fokus im obigen Beispiel auf Button "Zwei" befindet und der Benutzer nach rechts navigiert, ist Button "Vier" der beste Fokuskandidat. Der Fokus wird jedoch auf Button "Drei" verschoben, weil das übergeordnete Element UserControl den Fokus zwingt, sich dorthin zu bewegen, sobald es sich außerhalb seines visuellen Baums befindet.

Pfad der geringsten Klicks

Versuchen Sie, dem Benutzer die am häufigsten verwendeten Aufgaben in der geringsten Anzahl von Klicks zu ermöglichen. Im folgenden Beispiel wird der TextBlockzwischen der Wiedergabeschaltfläche (die anfangs den Fokus erhält) und einem häufig verwendeten Element platziert, sodass ein unnötiges Element zwischen Prioritätsaufgaben platziert wird.

Bewährte Methoden für die Navigation bieten Pfad mit geringsten Klicks

Im folgenden Beispiel wird der TextBlock stattdessen über der Schaltfläche " Wiedergeben " platziert. Durch einfaches Neuanordnen der Benutzeroberfläche werden unnötige Elemente nicht zwischen Prioritätsaufgaben platziert, wodurch die Benutzerfreundlichkeit Ihrer App erheblich verbessert wird.

TextBlock wurde über die Wiedergabeschaltfläche verschoben, sodass es nicht mehr zwischen Prioritätsaufgaben liegt.

CommandBar und ContextFlyout

Wenn Sie eine CommandBar verwenden, bedenken Sie das Problem beim Scrollen durch eine Liste, wie unter Problem: UI-Elemente hinter langen Scroll-Listen/Gittern erwähnt. Die folgende Abbildung zeigt ein UI-Layout mit dem CommandBar am unteren Ende einer Liste/eines Rasters. Der Benutzer muss bis zum Ende der Liste/des Rasters scrollen, um zum CommandBar zu gelangen.

CommandBar am Ende der Liste/des Rasters

Was geschieht, wenn Sie die CommandBaroben aufgeführte Liste/das Raster einfügen? Während ein Benutzer, der in der Liste oder dem Raster nach unten scrollt, zurück nach oben scrollen muss, um die zuerst genannte Option zu erreichen, erfordert dies etwas weniger Aufwand als die vorherige Konfiguration. Beachten Sie, dass dies davon ausgeht, dass der anfängliche Fokus Ihrer App neben oder oberhalb des CommandBarBereichs platziert wird. Dieser Ansatz funktioniert nicht so gut, wenn sich der anfängliche Fokus unterhalb der Liste/des Rasters befindet. Wenn es sich bei diesen CommandBar Elementen um globale Aktionselemente handelt, auf die nicht sehr häufig zugegriffen werden muss (z. B. eine Schaltfläche " Synchronisieren "), kann es akzeptabel sein, sie über dem Listen-/Raster zu haben.

Obwohl Sie die CommandBar-Elemente nicht vertikal stapeln können, besteht eine weitere Möglichkeit darin, sie gegen die Bildlaufrichtung anzuordnen (z. B. links oder rechts von einer vertikal scrollenden Liste oder am oberen oder unteren Rand einer horizontal scrollenden Liste), wenn dies gut zu Ihrem UI-Layout passt.

Wenn Ihre App über ein CommandBar verfügt, dessen Elemente von den Benutzern leicht zugänglich sein müssen, sollten Sie diese Elemente in einem ContextFlyout platzieren und aus dem CommandBar entfernen. ContextFlyout ist eine Eigenschaft von UIElement und ist das Kontextmenü , das diesem Element zugeordnet ist. Wenn Sie auf dem PC mit der rechten Maustaste auf ein Element mit einem ContextFlyout klicken, wird das Kontextmenü eingeblendet. Auf Xbox One geschieht dies, wenn Sie die Menüschaltfläche drücken, während sich der Fokus auf einem solchen Element befindet.

Herausforderungen beim UI-Layout

Einige UI-Layouts sind aufgrund der Art der XY-Fokusnavigation schwieriger und sollten fallweise ausgewertet werden. Es gibt zwar keinen einzigen "richtigen" Weg, und welche Lösung Sie auswählen, liegt zwar an den spezifischen Anforderungen Ihrer App, es gibt jedoch einige Techniken, mit denen Sie eine großartige TV-Erfahrung erzielen können.

Um dies besser zu verstehen, sehen wir uns eine imaginäre App an, die einige dieser Probleme und Techniken veranschaulicht, um sie zu überwinden.

Hinweis

Diese gefälschte App soll UI-Probleme und potenzielle Lösungen für sie veranschaulichen und nicht die beste Benutzererfahrung für Ihre jeweilige App anzeigen.

Es folgt eine imaginäre Immobilien-App, die eine Liste der zum Verkauf verfügbaren Häuser, eine Karte, eine Beschreibung einer Immobilie und andere Informationen anzeigt. Diese App stellt drei Herausforderungen dar, die Sie mithilfe der folgenden Techniken überwinden können:

Gefälschte Immobilien-App

Problem: UI-Elemente nach langen Scroll-Listen/Rastern

Die in der folgenden Abbildung angezeigte ListView der Eigenschaften ist eine sehr lange scrollbare Liste. Wenn das Engagement nicht erforderlich ist, wird der Fokus auf das erste Element in der Liste gesetzt, wenn der Benutzer zur Liste navigiert. Damit der Benutzer die Schaltfläche "Zurück " oder "Weiter " erreicht, muss er alle Elemente in der Liste durchlaufen. In solchen Fällen, in denen es schmerzhaft ist, dass der Benutzer die gesamte Liste durchlaufen muss – das heißt, wenn die Liste nicht kurz genug ist, um diese Erfahrung akzeptabel zu machen – sollten Sie andere Optionen in Betracht ziehen.

Immobilien-App: Liste mit 50 Elementen benötigt 51 Klicks, um Schaltflächen unten zu erreichen

Solutions

Neuanordnen der Benutzeroberfläche

Wenn Ihr anfänglicher Fokus nicht auf den unteren Rand der Seite gelegt wird, sind UI-Elemente, die über einer langen Scrolling-Liste platziert werden, in der Regel einfacher zugänglich als wenn sie darunter platziert werden. Wenn dieses neue Layout für andere Geräte funktioniert, kann das Ändern des Layouts für alle Gerätefamilien anstelle spezieller UI-Änderungen nur für Xbox One ein kostengünstigerer Ansatz sein. Darüber hinaus wird durch das Platzieren von UI-Elementen gegen die Bildlaufrichtung (d. h. horizontal zu einer vertikal scrollenden Liste oder vertikal zu einer horizontal scrollenden Liste) eine noch bessere Barrierefreiheit verbessert.

Immobilien-App: Schaltflächen über einer langen Scroll-Liste platzieren

Fokusaktivierung

Wenn das Engagement erforderlich ist, wird das gesamte ListView zu einem einzigen Fokusziel. Der Benutzer kann den Inhalt der Liste umgehen, um zum nächsten fokussierbaren Element zu gelangen. Erfahren Sie mehr darüber, welche Steuerelemente das Engagement unterstützen und wie sie bei der Fokusaktivierung verwendet werden.

Immobilien-App: Festlegen des Einsatzes auf

Problem: ScrollViewer ohne fokussierbare Elemente

Da die XY-Fokusnavigation darauf beruht, dass immer nur ein fokussierbares UI-Element auf einmal angesteuert wird, kann ein ScrollViewer, der keine fokussierbaren Elemente enthält (wie etwa einer, der nur aus Text besteht, wie in diesem Beispiel), dazu führen, dass der Benutzer nicht in der Lage ist, den gesamten Inhalt im ScrollViewer anzuzeigen. Lösungen zu diesem und anderen zugehörigen Szenarien finden Sie unter Focus Engagement.

Immobilien-App: ScrollViewer mit nur Text

Problem: Ui mit freiem Bildlauf

Wenn Ihre App eine benutzeroberfläche mit freiem Bildlauf erfordert, z. B. eine Zeichnungsoberfläche oder in diesem Beispiel eine Karte, funktioniert die XY-Fokusnavigation einfach nicht. In solchen Fällen können Sie den Mausmodus aktivieren, damit der Benutzer innerhalb eines UI-Elements frei navigieren kann.

Zuordnen des UI-Elements mithilfe des Mausmodus

Mausmodus

Wie in XY-Fokusnavigation und -interaktion beschrieben, wird auf Xbox One der Fokus mithilfe eines XY-Navigationssystems verschoben, sodass der Benutzer den Fokus von Steuerelement zu Steuerelement verschieben kann, indem er nach oben, unten, links und rechts bewegt wird. Einige Steuerelemente, z. B. WebView und MapControl, erfordern jedoch eine mausähnliche Interaktion, bei der Benutzer den Mauszeiger frei innerhalb der Grenzen des Steuerelements bewegen können. Es gibt auch einige Apps, in denen es sinnvoll ist, dass der Benutzer den Zeiger über die gesamte Seite verschieben kann, wobei die Erfahrung mit Gamepad oder Fernbedienung ähnlich ist wie bei der Nutzung einer Maus auf einem PC.

Für diese Szenarien sollten Sie einen Zeiger (Mausmodus) für die gesamte Seite oder auf einem Steuerelement innerhalb einer Seite anfordern. Ihre App könnte beispielsweise eine Seite mit einem WebView Steuerelement haben, das im Mausmodus nur innerhalb des Steuerelements arbeitet, während die XY-Fokusnavigation überall sonst verwendet wird. Um einen Zeiger anzufordern, können Sie angeben, ob Sie ihn wünschen, wenn ein Steuerelement oder eine Seite aktiv ist oder wenn eine Seite den Fokus hat.

Hinweis

Das Anfordern eines Zeigers, wenn ein Steuerelement den Fokus erhält, wird nicht unterstützt.

Sowohl für XAML als auch für gehostete Web-Apps, die auf Xbox One ausgeführt werden, ist der Mausmodus für die gesamte App standardmäßig aktiviert. Es wird dringend empfohlen, diese Option zu deaktivieren und ihre App für die XY-Navigation zu optimieren. Um dies zu tun, legen Sie die Application.RequiresPointerMode-Eigenschaft so auf WhenRequested fest, dass der Mausmodus nur aktiviert wird, wenn ein Steuerelement oder eine Seite dies erfordert.

Verwenden Sie dazu in einer XAML-App den folgenden Code in Ihrer App Klasse:

public App()
{
    this.InitializeComponent();
    this.RequiresPointerMode =
        Windows.UI.Xaml.ApplicationRequiresPointerMode.WhenRequested;
    this.Suspending += OnSuspending;
}

Weitere Informationen, einschließlich Beispielcode für HTML/JavaScript, finden Sie unter Deaktivieren des Mausmodus.

Das folgende Diagramm zeigt die Tastenzuordnungen für Gamepads/Fernbedienungen im Mausmodus.

Tastenzuordnungen für Gamepad/Remote im Mausmodus

Hinweis

Der Mausmodus wird nur auf Xbox One mit Gamepad/Fernbedienung unterstützt. Bei anderen Gerätefamilien und Eingabetypen wird sie automatisch ignoriert.

Verwenden Sie die RequiresPointer-Eigenschaft auf einem Steuerelement oder einer Seite, um den Mausmodus darauf zu aktivieren. Diese Eigenschaft weist drei mögliche Werte auf: Never (Standardwert), WhenEngagedund WhenFocused.

Aktivieren des Mausmodus auf einem Steuerelement

Wenn der Benutzer ein Steuerelement mit RequiresPointer="WhenEngaged" betätigt, wird der Mausmodus auf dem Steuerelement aktiviert, bis der Benutzer die Steuerung loslässt. Der folgende Codeausschnitt veranschaulicht einen einfachen MapControl Codeausschnitt, der den Mausmodus aktiviert, wenn er aktiviert wird:

<Page>
    <Grid>
        <MapControl IsEngagementRequired="true"
                    RequiresPointer="WhenEngaged"/>
    </Grid>
</Page>

Hinweis

Wenn ein Steuerelement den Mausmodus aktiviert, muss es auch eine Interaktion mit IsEngagementRequired="true"erfordern. Andernfalls wird der Mausmodus nie aktiviert.

Wenn sich ein Steuerelement im Mausmodus befindet, befinden sich auch die geschachtelten Steuerelemente im Mausmodus. Der angeforderte Modus seiner untergeordneten Elemente wird ignoriert – es ist unmöglich, dass ein übergeordnetes Element im Mausmodus ist, während ein untergeordnetes Element es nicht ist.

Darüber hinaus wird der angeforderte Modus eines Steuerelements nur überprüft, wenn es den Fokus erhält, sodass sich der Modus nicht dynamisch ändert, während es den Fokus hat.

Aktivieren des Mausmodus auf einer Seite

Wenn eine Seite über die Eigenschaft RequiresPointer="WhenFocused"verfügt, wird der Mausmodus für die gesamte Seite aktiviert, wenn sie den Fokus erhält. Der folgende Codeausschnitt veranschaulicht das Vergeben einer Seite dieser Eigenschaft:

<Page RequiresPointer="WhenFocused">
    ...
</Page>

Hinweis

Der WhenFocused Wert wird nur für Page-Objekte unterstützt. Wenn Sie versuchen, diesen Wert für ein Steuerelement festzulegen, wird eine Ausnahme ausgelöst.

Deaktivieren des Mausmodus für Vollbildinhalte

In der Regel sollten Sie den Cursor ausblenden, wenn Video oder andere Inhaltstypen im Vollbildmodus angezeigt werden, da er den Benutzer ablenken kann. Dieses Szenario tritt auf, wenn der Rest der App den Mausmodus verwendet, Sie ihn aber beim Anzeigen von Vollbildinhalten deaktivieren möchten. Um dies zu erreichen, platzieren Sie den Vollbildinhalt eigenständig Page, und führen Sie die folgenden Schritte aus.

  1. Legen Sie im App Objekt fest RequiresPointerMode="WhenRequested".
  2. Legen Sie in jedem Page Objekt mit Ausnahme des Vollbildmodus Pagefest RequiresPointer="WhenFocused".
  3. Setzen Sie für den Vollbildmodus Page, RequiresPointer="Never" fest.

Auf diese Weise wird der Cursor nie angezeigt, wenn Der Vollbildinhalt angezeigt wird.

Visuelle Fokuselemente

Das Fokusvisual ist der Rahmen um das UI-Element, das derzeit den Fokus besitzt. Dies hilft dem Benutzer, sich zu orientieren, sodass er die Benutzeroberfläche einfach navigieren kann, ohne verloren zu gehen.

Mit einem visuellen Update und zahlreichen Anpassungsoptionen, die dem Fokusvisual hinzugefügt wurden, können Entwickler darauf vertrauen, dass ein einzelnes Fokusvisual gut auf PCs und Xbox One sowie auf allen anderen Windows-Geräten funktioniert, die Tastatur und/oder Gamepad/Fernbedienung unterstützen.

Während dasselbe Fokusvisual auf verschiedenen Plattformen verwendet werden kann, unterscheidet sich der Kontext, in dem der Benutzer sie findet, für die 10-Fuß-Erfahrung geringfügig. Sie sollten davon ausgehen, dass der Benutzer nicht voll auf den gesamten FERNSEHbildschirm achtet, und daher ist es wichtig, dass das aktuell fokussierte Element für den Benutzer jederzeit deutlich sichtbar ist, um die Frustration der Suche nach dem Visuellen zu vermeiden.

Es ist auch wichtig zu beachten, dass das Fokusvisual standardmäßig bei Verwendung eines Gamepads oder einer Fernbedienung, aber nicht einer Tastatur angezeigt wird. Selbst wenn Sie sie nicht implementieren, wird sie daher angezeigt, wenn Sie Ihre App auf Xbox One ausführen.

Positionierung des anfänglichen visuellen Fokus

Platzieren Sie beim Starten einer App oder beim Navigieren zu einer Seite den Fokus auf ein UI-Element, das als erstes Element sinnvoll ist, für das der Benutzer Maßnahmen ergreifen würde. Beispielsweise kann eine Foto-App den Fokus auf das erste Element in der Galerie setzen, und eine Musik-App, die zu einer detaillierten Ansicht eines Liedes navigiert wurde, könnte den Fokus auf die Wiedergabeschaltfläche setzen, um Die Wiedergabe von Musik zu erleichtern.

Versuchen Sie, den anfänglichen Fokus in den oberen linken Bereich Ihrer App zu setzen (oder oben rechts für einen Rechts-nach-links-Fluss). Die meisten Benutzer neigen dazu, sich zuerst auf diese Ecke zu konzentrieren, da dort der Inhaltsfluss der App in der Regel beginnt.

Klares Sichtbarmachen des Fokus

Ein Fokusvisual sollte immer auf dem Bildschirm sichtbar sein, damit der Benutzer weitermachen kann, wo er aufgehört hat, ohne nach dem Fokus zu suchen. Ebenso sollte immer ein fokussierbares Element auf dem Bildschirm vorhanden sein, z. B. keine Popups mit nur Text und keine fokussierbaren Elemente.

Eine Ausnahme zu dieser Regel wäre für Vollbild-Erfahrungen wie das Ansehen von Videos oder Bilder, in deren Fall es nicht angebracht wäre, die Fokusanzeige zu zeigen.

Reveal Focus

Der Reveal-Fokus ist ein Lichteffekt, der den Rahmen von fokussierbaren Elementen animiert, z. B. eine Schaltfläche, wenn der Benutzer Gamepad oder Tastaturfokus darauf verschiebt. Durch das Animieren des Leuchteffekts um den Rahmen der fokussierten Elemente gibt der Reveal-Fokus den Benutzern ein besseres Verständnis darüber, wo der Fokus liegt und wohin er sich bewegt.

Der Reveal-Fokus ist standardmäßig deaktiviert. Für 10-Fuß-Umgebungen sollten Sie den Fokus sichtbar machen, indem Sie die Application.FocusVisualKind-Eigenschaft im Konstruktor Ihrer App festlegen.

    if(AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Xbox")
    {
        this.FocusVisualKind = FocusVisualKind.Reveal;
    }

Weitere Informationen finden Sie in der Anleitung für Reveal Focus.

Anpassen des visuellen Fokus

Wenn Sie die Fokusanzeige anpassen möchten, können Sie dies tun, indem Sie die Eigenschaften ändern, die mit der Fokusanzeige für jedes Steuerelement zusammenhängen. Es gibt mehrere solche Eigenschaften, die Sie nutzen können, um Ihre App zu personalisieren.

Sie können sogar die vom System bereitgestellten Fokusanzeigen deaktivieren, indem Sie ihre eigenen visuellen Zustände verwenden. Weitere Informationen finden Sie unter VisualState.

Overlay-Lichtausblendung

Um die Aufmerksamkeit des Benutzers auf die UI-Elemente zu lenken, die der Benutzer gerade mit dem Gamecontroller oder der Fernbedienung manipuliert, fügt UWP automatisch eine "Rauch"-Ebene hinzu, die Bereiche außerhalb der Popup-UI abdeckt, wenn die App auf Xbox One ausgeführt wird. Dies erfordert keine zusätzliche Arbeit, ist aber etwas, das Sie beim Entwerfen der Benutzeroberfläche berücksichtigen sollten. Sie können die Eigenschaft an jedem FlyoutBase festlegen, um die Rauchschicht zu aktivieren oder zu deaktivieren. Standardmäßig ist es auf Auto so, dass sie auf Xbox aktiviert und auf anderen Plattformen deaktiviert ist. Weitere Informationen finden Sie unter „Modal vs light dismiss“.

Fokusinteraktion

Die Fokusaktivierung soll die Verwendung eines Gamepads oder einer Fernbedienung für die Interaktion mit einer App vereinfachen.

Hinweis

Das Festlegen der Fokusaktivierung wirkt sich nicht auf tastatur oder andere Eingabegeräte aus.

Wenn die Eigenschaft IsFocusEngagementEnabled bei einem FrameworkElement-Objekt auf True festgelegt ist, wird das Steuerelement als fokuserforderlich markiert. Dies bedeutet, dass der Benutzer die A/Select-Schaltfläche drücken muss, um das Steuerelement zu aktivieren und damit zu interagieren. Wenn sie fertig sind, können sie die Taste "B/Zurück" drücken, um die Steuerung zu deaktivieren und zu verlassen.

Hinweis

IsFocusEngagementEnabled ist eine neue API und noch nicht dokumentiert.

Fokusfang

Die Fokusfangung geschieht, wenn ein Benutzer versucht, in der Benutzeroberfläche einer App zu navigieren, aber innerhalb eines Steuerelements "gefangen" wird, wodurch es schwierig oder sogar unmöglich ist, außerhalb dieses Steuerelements zu navigieren.

Das folgende Beispiel zeigt eine UI, die eine Fokusfalle erstellt.

Schaltflächen links und rechts neben einem horizontalen Schieberegler

Wenn der Benutzer von der linken Schaltfläche zur rechten Schaltfläche navigieren möchte, wäre es logisch, davon auszugehen, dass alles, was er tun müsste, zweimal auf dem D-Pad/linken Stick rechts drücken muss. Wenn der Schieberegler jedoch keine Interaktion erfordert, würde das folgende Verhalten eintreten: Wenn der Benutzer das erste Mal nach rechts drückt, würde der Fokus auf Slider verschoben, und wenn er erneut nach rechts drückt, würde der Slider-Knopf nach rechts bewegt werden. Der Benutzer würde den Griff nach rechts schieben und erreicht die Schaltfläche nicht.

Es gibt mehrere Ansätze, um dieses Problem zu umgehen. Eine besteht darin, ein anderes Layout zu entwerfen, ähnlich wie das Beispiel der Immobilien-App in der XY-Fokusnavigation und -interaktion, bei der wir die Schaltflächen "Zurück" und "Weiter" oberhalb von ListView platziert haben. Das vertikale Stapeln der Steuerelemente statt horizontal wie in der folgenden Abbildung würde das Problem lösen.

Schaltflächen über und unter einem horizontalen Schieberegler

Nun kann der Benutzer zu jedem der Steuerelemente navigieren, indem er auf dem D-Pad oder dem linken Stick nach oben und unten drückt. Wenn der Slider im Fokus ist, kann er nach links und rechts drücken, um den Slider Regler wie erwartet zu bewegen.

Ein weiterer Ansatz zur Lösung dieses Problems besteht darin, ein Engagement auf dem Slider zu erfordern. Wenn Sie festlegen IsFocusEngagementEnabled="True", führt dies zu dem folgenden Verhalten.

Erfordern der Fokussierung auf dem Schieberegler, damit der Benutzer zur Schaltfläche auf der rechten Seite navigieren kann

Wenn eine Fokusverlagerung in Slider erforderlich ist, kann der Benutzer einfach auf die Schaltfläche auf der rechten Seite gelangen, indem er zweimal auf dem D-Pad/linken Stick nach rechts drückt. Diese Lösung ist großartig, da keine UI-Anpassung erforderlich ist und das erwartete Verhalten erzeugt wird.

Steuerelemente für Elemente

Neben dem Schieberegler-Steuerelement gibt es andere Steuerelemente, die Sie möglicherweise einbinden möchten, z. B.:

Im Gegensatz zu dem Slider-Steuerelement fangen diese Steuerelemente den Fokus nicht in sich selbst ein; jedoch können sie bei großen Datenmengen zu Problemen mit der Benutzerfreundlichkeit führen. Im Folgenden ist ein Beispiel für ein ListView, das eine große Datenmenge enthält.

ListView mit großer Datenmenge und Schaltflächen oben und unten

Ähnlich wie im Slider Beispiel versuchen wir, von der Schaltfläche oben zur Schaltfläche unten mit einem Gamepad/Fernbedienung zu navigieren. Beginnend mit dem Fokus auf der oberen Taste wird durch Drücken auf das D-Pad/Stick der Fokus auf das erste Element im ListView ("Element 1") gesetzt. Wenn der Benutzer erneut nach unten drückt, erhält das nächste Element in der Liste den Fokus, nicht die Schaltfläche unten. Um zur Schaltfläche zu gelangen, muss der Benutzer zuerst durch jedes Element im ListView navigieren. Wenn ListView eine große Menge an Daten enthält, kann dies unangenehm und keine optimale Benutzererfahrung sein.

Um dieses Problem zu lösen, setzen Sie die Eigenschaft IsFocusEngagementEnabled="True" auf ListView so, dass eine Interaktion erforderlich ist. Auf diese Weise kann der Benutzer ListView schnell überspringen, indem er einfach eine Taste nach unten drückt. Sie können jedoch nicht durch die Liste scrollen oder ein Element daraus auswählen, es sei denn, sie aktivieren sie, indem sie die A/Select-Schaltfläche drücken, wenn sie den Fokus hat, und dann die Schaltfläche "B/Zurück " drücken, um das Element zu deaktivieren.

ListView mit erforderlicher Benutzerinteraktion

ScrollViewer

Etwas von diesen Steuerelementen unterscheidet sich der ScrollViewer, der eigene Eigenheiten zu berücksichtigen hat. Wenn Sie einen ScrollViewer mit fokussierbarem Inhalt haben, können Sie durch Navigation zu ScrollViewer standardmäßig seine fokussierbaren Elemente durchlaufen. Wie in einem ListView, müssen Sie durch jedes Element scrollen, um außerhalb des ScrollViewerElements zu navigieren.

Wenn der ScrollViewerkeinen fokussierbaren Inhalt hat, z. B. wenn er nur Text enthält, können Sie IsFocusEngagementEnabled="True" so festlegen, dass der Benutzer die ScrollViewer mit der A/Select-Schaltfläche aktivieren kann. Nachdem sie sich engagiert haben, können sie mit dem D-Pad/linken Stick durch den Text scrollen und dann die Taste "B/Zurück " drücken, um den Text zu deaktivieren, wenn sie fertig sind.

Ein anderer Ansatz wäre, IsTabStop="True" auf dem ScrollViewer festzulegen, sodass der Benutzer das Steuerelement nicht einbinden muss – er kann einfach den Fokus darauf setzen und dann mit dem D-Pad/linken Stick scrollen, wenn keine fokussierbaren Elemente innerhalb des ScrollViewer vorhanden sind.

Standardeinstellungen für die Fokusaktivierung

Einige Steuerelemente führen häufig zu einem Einfangen des Fokus, sodass deren Standardeinstellungen eine Fokusaktivierung erfordern. Andere hingegen haben standardmäßig die Fokusaktivierung deaktiviert, können aber von einer Aktivierung profitieren. In der folgenden Tabelle sind diese Steuerelemente und ihre standardmäßigen Fokusaktivierungsverhalten aufgeführt.

Steuerung Standardeinstellung für die Fokusaktivierung
CalendarDatePicker Ein
FlipView Off
Rasteransicht Off
ListBox Off
Listenansicht Off
ScrollViewer Off
SemanticZoom Off
Schieberegler Ein

Alle anderen Windows-Steuerelemente führen zu keinen Verhaltens- oder visuellen Änderungen, wenn IsFocusEngagementEnabled="True".

Zusammenfassung

Sie können Windows-Anwendungen erstellen, die für ein bestimmtes Gerät oder eine bestimmte Oberfläche optimiert sind. Die universelle Windows-Plattform ermöglicht ihnen jedoch auch das Erstellen von Apps, die auf allen Geräten erfolgreich verwendet werden können, sowohl in der 2-Fuß- als auch in der 10-Fuß-Benutzeroberfläche und unabhängig von der Eingabegerät- oder Benutzerfähigkeit. Durch das Befolgen der Empfehlungen in diesem Artikel können Sie sicherstellen, dass Ihre App sowohl auf dem Fernseher als auch auf einem PC so gut wie möglich ist.