FocusManager Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
- 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 StackPanel3
ein Popup
, das wiederum enthältButton5
. Wenn IsOpen auf true
festgelegt ist und der Fokus von Button1
zu Button5
verschoben 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 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.
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. |