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(Windows.Foundation.UniversalApiContract, 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(Windows.Foundation.UniversalApiContract), 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

Windows-Anforderungen

Gerätefamilie
Windows 10 (eingeführt in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (eingeführt in v1.0)

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 ein Popup StackPanel3, das wiederum Button5 enthält. Wenn IsOpen auf true festgelegt ist und der Fokus von Button1 auf Button5 verschoben wird, werden die Ereignisse LosingFocus und LostFocus in der visuellen Struktur angezeigt (StackPanel1, Grid und Page rufen beide Ereignisse ab). Allerdings empfängt nur StackPanel3 die nachfolgenden GettingFocus- und GotFocus-Ereignisse, die von Button5 aus angezeigt werden (Grid und Page nicht, da sie sich nicht in einer beziehung zwischen übergeordneten und untergeordneten Elementen mit Popup befinden).

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.

Versionsverlauf

Windows-Version SDK-Version Wertschöpfung
1703 15063 FindFirstFocusableElement
1703 15063 FindLastFocusableElement
1703 15063 FindNextElement(FocusNavigationDirection)
1703 15063 FindNextElement(FocusNavigationDirection,FindNextElementOptions)
1703 15063 TryMoveFocus(FocusNavigationDirection,FindNextElementOptions)
1803 17134 TryFocusAsync
1803 17134 TryMoveFocusAsync(FocusNavigationDirection)
1803 17134 TryMoveFocusAsync(FocusNavigationDirection,FindNextElementOptions)
1809 17763 GettingFocus
1809 17763 GotFocus
1809 17763 LosingFocus
1809 17763 LostFocus
1903 18362 GetFocusedElement(XamlRoot)

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