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 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 Popup
StackPanel3
, die 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
über die visuelle Struktur (StackPanel1
, die Grid
und 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 Popup
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
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. |