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

Es wird empfohlen, das UIElement Fokus-Routingereignisse anstelle von FocusManager-Ereignissen zu verwenden, 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-Benutzeroberfläche angezeigt werden, sind aber tatsächlich ihr eigener Fokusbereich und nicht Teil der visuellen Strukturhierarchie. Bei einem Popup-tritt dies auf, wenn Sie programmgesteuert IsOpen 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 eine PopupStackPanel3, die wiederum Button5enthält. Wenn IsOpen- auf true festgelegt ist und der Fokus von Button1 auf Button5verschoben wird, werden die Ereignisse LosingFocus und LostFocus über die visuelle Struktur (StackPanel1, die Gridund die Page beide Ereignisse angezeigt). Allerdings empfängt nur StackPanel3 die nachfolgenden GettingFocus und GotFocus Ereignisse, die von Button5 (Grid und Page nicht, da sie sich nicht in einer Beziehung zwischen übergeordneten und untergeordneten Elementen mit Popupbefinden).

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

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

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