Freigeben über


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 zwischen UI-Elementen mit den Pfeiltasten zu wechseln.

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

Es wird empfohlen, nach Möglichkeit die UiElement-Fokusroutenereignisse anstelle von FocusManager-Ereignissen zu verwenden.

FocusManager ist für erweiterte Szenarien vorgesehen, in denen bestimmte Elemente in einer Anwendung keine Blasenereignisse von einem UIElement empfangen. Beispielsweise werden visuelle "Überlagerungsobjekte", z. B. Popup, QuickInfo oder MenuFlyout , die als Teil der App-Benutzeroberfläche 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 der Fokus sich in und aus dem Popup bewegt.

Hier sehen Sie einige grundlegende Markups, um das Beispiel zu veranschaulichen:

<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 StackPanel3ein Popup , das wiederum enthältButton5. Wenn IsOpen auf true festgelegt ist und der Fokus von Button1 zu Button5verschoben wird, werden die LosingFocus Ereignisse und LostFocus in der visuellen Struktur (StackPanel1, dem Grid- und dem Page Abrufen beider Ereignisse) angezeigt. Empfängt jedoch nur StackPanel3 die nachfolgenden GettingFocus Ereignisse und GotFocus ereignisse, die von Button5 (Grid und Page nicht, da sie sich nicht in einer übergeordneten und untergeordneten Beziehung mit Popupbefinden).

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

Es kann mehrere Elemente mit logischem Fokus geben, aber nur ein Element mit logischem Fokus pro Fokusbereich. Ein Element mit logischem Fokus verfügt nicht unbedingt über den Tastaturfokus, aber ein Element mit Tastaturfokus hat den logischen Fokus.

Methoden

FindFirstFocusableElement(DependencyObject)

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

FindLastFocusableElement(DependencyObject)

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

FindNextElement(FocusNavigationDirection)

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

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).

FindNextFocusableElement(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 angegebenen Hinweisrechteck erhalten soll.

GetFocusedElement()

Ruft das Element auf der Benutzeroberfläche ab, das den Fokus hat.

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)

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

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

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

TryMoveFocusAsync(FocusNavigationDirection)

Versucht asynchron, den Fokus vom aktuellen 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 und den angegebenen Navigationsoptionen zu ändern.

Ereignisse

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 sprudelt.

GotFocus

Tritt auf, wenn ein Element in einem Containerelement (einem Fokusbereich) den Fokus erhält. Dieses Ereignis wird asynchron ausgelöst, sodass der Fokus möglicherweise verschoben wird, bevor das Bubbling abgeschlossen ist.

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 sprudelt.

LostFocus

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

Gilt für:

Weitere Informationen