FocusManager Klasse

Definition

Eine Hilfsklasse, die die globale Verwaltung von Fokusaktionen und Ereignissen für alle Elemente in einer Anwendung ermöglicht.

public ref class FocusManager sealed
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class FocusManager final
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class FocusManager
Public NotInheritable Class FocusManager
Vererbung
Object Platform::Object IInspectable FocusManager
Attribute

Beispiele

Verwenden Sie TryMoveFocus , um mithilfe der Pfeiltasten zwischen UI-Elementen zu durchlaufen.

private void Page_KeyUp(object sender, KeyRoutedEventArgs e)
{
   if (e.Key == Windows.System.VirtualKey.Up)
   {
      // Mimic Shift+Tab when user hits up arrow key.
      FocusManager.TryMoveFocus(FocusNavigationDirection.Previous);
   }
   else if (e.Key == Windows.System.VirtualKey.Down)
   {
      // Mimic Tab when user hits down arrow key.
      FocusManager.TryMoveFocus(FocusNavigationDirection.Next);
   }
}

Hinweise

Wir empfehlen die Verwendung des UIElement-Fokus-Routingereignisses anstelle von FocusManager-Ereignissen, wenn möglich.

FocusManager ist für erweiterte Szenarien vorgesehen, in denen bestimmte Elemente in einer Anwendung keine Blasenereignisse von einem UIElement empfangen. Beispielsweise visuelle "Overlay"-Objekte wie Popup, QuickInfo oder MenuFlyout , die als Teil der App-UI angezeigt werden, aber tatsächlich ihr eigener Fokusbereich und nicht Teil der visuellen Strukturhierarchie sind. Im Fall eines Popups tritt dies auf, wenn Sie IsOpen programmgesteuert auf "true" festlegen und den Fokus in das Popup ein- und aus dem Popup verschieben.

Im Folgenden finden Sie einige grundlegende Markups zur Veranschaulichung des Beispiels:

<Page …>
    <Grid …>
        <Popup …>
            <StackPanel Name="StackPanel3" …>
                <TextBlock Text="StackPanel3" />
                <Button Content="Button5" …/>
            </StackPanel>
        </Popup>
        <TextBlock Text="Grid" … />
        <StackPanel Name="StackPanel1" …>
            <TextBlock Text="StackPanel1" …/>
            <Button Content="Button1" …/>
            <Button Content="Button2" … />
        </StackPanel>
        <StackPanel Name="StackPanel2" …>
            <TextBlock Text="StackPanel2" …/>
            <Button Content="Button3" … />
            <Button Content="Button4" … />
        </StackPanel>
    </Grid>
</Page>

In diesem Fall enthält ein Popup Enthält StackPanel3, das wiederum enthält Button5. Wenn IsOpen auf true den Fokus gesetzt ist und von Button1 zu Button5diesem wechselt, blasen sich die LosingFocus Ereignisse LostFocus über die visuelle Struktur (StackPanel1, das Gridund das Page Abrufen beider Ereignisse). Empfängt jedoch nur StackPanel3 die nachfolgenden GettingFocus Ereignisse, von Button5 denen aus (Grid und Page nicht, da sie sich nicht in einer Beziehung Popupzwischen übergeordneten und GotFocus untergeordneten Elementen befinden).

Eine Anwendung kann mehrere Elemente mit logischem Fokus haben (abhängig von der Anzahl der Fokusbereiche). Allerdings kann nur ein Element in der Anwendung den Tastaturfokus haben.

Es können mehrere Elemente mit logischem Fokus vorhanden sein, aber nur ein Element mit logischem Fokus pro Fokusbereich. Ein Element mit logischem Fokus hat nicht unbedingt den Tastaturfokus, aber ein Element mit Tastaturfokus hat logischen Fokus.

Methoden

Name Beschreibung
FindFirstFocusableElement(DependencyObject)

Ruft das erste Element ab, das den Fokus basierend auf dem angegebenen Bereich empfangen kann.

FindLastFocusableElement(DependencyObject)

Ruft das letzte Element ab, das den Fokus basierend auf dem angegebenen Bereich empfangen kann.

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

Ruft das Element ab, das den Fokus basierend auf der angegebenen Navigationsrichtung erhalten soll (kann nicht mit der Registerkartennavigation verwendet werden, siehe Hinweise).

FindNextElement(FocusNavigationDirection)

Ruft das Element ab, das den Fokus basierend auf der angegebenen Navigationsrichtung erhalten soll.

FindNextFocusableElement(FocusNavigationDirection, Rect)

Ruft das Element ab, das den Fokus basierend auf der angegebenen Navigationsrichtung und dem Hinweisrechteck erhalten soll.

FindNextFocusableElement(FocusNavigationDirection)

Ruft das Element ab, das den Fokus basierend auf der angegebenen Navigationsrichtung erhalten soll.

GetFocusedElement()

Ruft das Element in der Benutzeroberfläche ab, das den Fokus besitzt.

GetFocusedElement(XamlRoot)

Ruft das fokussierte Element im XAML-Inselcontainer ab.

TryFocusAsync(DependencyObject, FocusState)

Versucht asynchron, den Fokus auf ein Element festzulegen, wenn die Anwendung initialisiert wird.

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

Versucht, den Fokus vom Element mit Fokus auf das nächste fokussierbare Element in der angegebenen Richtung mithilfe der angegebenen Navigationsoptionen zu ändern.

TryMoveFocus(FocusNavigationDirection)

Versucht, den Fokus vom Element mit Fokus auf das nächste fokussierbare Element in der angegebenen Richtung zu ändern.

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

Versucht asynchron, den Fokus vom aktuellen Element mit Fokus auf das nächste fokussierbare Element in der angegebenen Richtung zu ändern und den angegebenen Navigationsoptionen zu unterliegen.

TryMoveFocusAsync(FocusNavigationDirection)

Versucht asynchron, den Fokus vom aktuellen Element mit Fokus auf das nächste fokussierbare Element in der angegebenen Richtung zu ändern.

Ereignisse

Name Beschreibung
GettingFocus

Tritt auf, bevor ein Element tatsächlich den Fokus erhält. Dieses Ereignis wird synchron ausgelöst, um sicherzustellen, dass der Fokus nicht verschoben wird, während das Ereignis bubblingt.

GotFocus

Tritt auf, wenn ein Element innerhalb eines Containerelements (ein Fokusbereich) den Fokus erhält. Dieses Ereignis wird asynchron ausgelöst, sodass der Fokus vor Abschluss des Bubblings verschoben werden kann.

LosingFocus

Tritt auf, bevor der Fokus vom aktuellen Element mit Fokus auf das Zielelement verschoben wird. Dieses Ereignis wird synchron ausgelöst, um sicherzustellen, dass der Fokus nicht verschoben wird, während das Ereignis bubblingt.

LostFocus

Tritt auf, wenn ein Element innerhalb eines Containerelements (ein Fokusbereich) den Fokus verliert. Dieses Ereignis wird asynchron ausgelöst, sodass sich der Fokus möglicherweise erneut bewegt, bevor die Bubbling abgeschlossen ist.

Gilt für:

Weitere Informationen