FocusManager Classe

Definizione

Classe helper che consente la gestione globale delle azioni e degli eventi dello stato attivo in tutti gli elementi di un'applicazione.

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
Ereditarietà
Object Platform::Object IInspectable FocusManager
Attributi

Esempio

Usare TryMoveFocus per attraversare gli elementi dell'interfaccia utente usando i tasti di direzione.

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);
   }
}

Commenti

È consigliabile usare gli eventi indirizzati dello stato attivo UIElement anziché gli eventi FocusManager quando possibile.

FocusManager è destinato a scenari avanzati in cui elementi specifici in un'applicazione non ricevono eventi a bolle da un UIElement. Ad esempio, oggetti visivi "overlay", ad esempio Popup, Descrizione comando o MenuFlyout visualizzati come parte dell'interfaccia utente dell'app, ma sono effettivamente il proprio ambito di messa a fuoco e non fanno parte della gerarchia della struttura ad albero visuale. Nel caso di un popup, questo si verifica quando si imposta IsOpen a livello di codice su true e lo stato attivo si sposta all'interno e all'esterno del popup.

Ecco alcuni markup di base per illustrare l'esempio:

<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 questo caso, un Popup oggetto contiene StackPanel3, che a sua volta contiene Button5. Quando IsOpen è impostato su true e lo stato attivo passa da Button1 a Button5, gli eventi e LostFocus si spostano verso l'alto LosingFocus nell'albero visivo (StackPanel1, Gride Page ottengono entrambi questi eventi). Tuttavia, riceve solo StackPanel3 gli eventi e GotFocus successivi GettingFocus da Button5 (Grid e Page non , perché non si trovano in una relazione padre-figlio con Popup).

Un'applicazione può avere più elementi con stato attivo logico (a seconda del numero di ambiti di stato attivo). Tuttavia, solo un elemento nell'applicazione può avere lo stato attivo della tastiera.

Possono essere presenti più elementi con stato attivo logico, ma solo un elemento con stato attivo logico per ambito dello stato attivo. Un elemento con stato attivo logico non ha necessariamente lo stato attivo della tastiera, ma un elemento con lo stato attivo della tastiera ha lo stato attivo logico.

Metodi

Nome Descrizione
FindFirstFocusableElement(DependencyObject)

Recupera il primo elemento che può ricevere lo stato attivo in base all'ambito specificato.

FindLastFocusableElement(DependencyObject)

Recupera l'ultimo elemento che può ricevere lo stato attivo in base all'ambito specificato.

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

Recupera l'elemento che deve ricevere lo stato attivo in base alla direzione di spostamento specificata (non può essere utilizzato con lo spostamento tramite tabulazione, vedere le note).

FindNextElement(FocusNavigationDirection)

Recupera l'elemento che deve ricevere lo stato attivo in base alla direzione di spostamento specificata.

FindNextFocusableElement(FocusNavigationDirection, Rect)

Recupera l'elemento che deve ricevere lo stato attivo in base alla direzione di spostamento e al rettangolo di hint specificati.

FindNextFocusableElement(FocusNavigationDirection)

Recupera l'elemento che deve ricevere lo stato attivo in base alla direzione di spostamento specificata.

GetFocusedElement()

Recupera l'elemento nell'interfaccia utente con stato attivo.

GetFocusedElement(XamlRoot)

Recupera l'elemento con stato attivo all'interno del contenitore dell'isola XAML.

TryFocusAsync(DependencyObject, FocusState)

Tenta in modo asincrono di impostare lo stato attivo su un elemento quando l'applicazione viene inizializzata.

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

Tenta di modificare lo stato attivo dall'elemento con lo stato attivo al successivo elemento attivabile nella direzione specificata, usando le opzioni di spostamento specificate.

TryMoveFocus(FocusNavigationDirection)

Tenta di modificare lo stato attivo dall'elemento con lo stato attivo all'elemento attivabile successivo nella direzione specificata.

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

Tenta in modo asincrono di modificare lo stato attivo dall'elemento corrente con lo stato attivo all'elemento attivabile successivo nella direzione specificata e soggetto alle opzioni di spostamento specificate.

TryMoveFocusAsync(FocusNavigationDirection)

Tenta in modo asincrono di modificare lo stato attivo dall'elemento corrente con lo stato attivo all'elemento attivabile successivo nella direzione specificata.

Eventi

Nome Descrizione
GettingFocus

Si verifica prima che un elemento riceva effettivamente lo stato attivo. Questo evento viene generato in modo sincrono per assicurarsi che lo stato attivo non venga spostato mentre l'evento è in stato di bubbling.

GotFocus

Si verifica quando un elemento all'interno di un elemento contenitore (ambito dello stato attivo) riceve lo stato attivo. Questo evento viene generato in modo asincrono, quindi lo stato attivo potrebbe spostarsi prima del completamento del bubbling.

LosingFocus

Si verifica prima che lo stato attivo passi dall'elemento corrente con lo stato attivo all'elemento di destinazione. Questo evento viene generato in modo sincrono per assicurarsi che lo stato attivo non venga spostato mentre l'evento è in stato di bubbling.

LostFocus

Si verifica quando un elemento all'interno di un elemento contenitore (ambito dello stato attivo) perde lo stato attivo. Questo evento viene generato in modo asincrono, quindi lo stato attivo potrebbe spostarsi nuovamente prima del completamento del bubbling.

Si applica a

Vedi anche