Condividi tramite


FocusManager Classe

Definizione

Classe helper che consente la gestione globale di azioni e 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 tra 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 ogni volta che è possibile.

FocusManager è destinato a scenari avanzati in cui elementi specifici in un'applicazione non ricevono eventi a bolle da un UIElement. Ad esempio, gli oggetti di visualizzazione "sovrimpressione", ad esempio Popup, Descrizione comando o MenuFlyout visualizzati come parte dell'interfaccia utente dell'app, ma sono effettivamente propri ambiti di messa a fuoco e non fanno parte della gerarchia dell'albero visivo. Nel caso di un popup, questo si verifica quando si imposta IsOpen a livello di codice su true e lo stato attivo si sposta in e fuori dal popup.

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

Un'applicazione può avere più elementi con lo stato attivo logico (a seconda del numero di ambiti di messa a fuoco). 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 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

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)

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

FindNextElement(FocusNavigationDirection, FindNextElementOptions)

Recupera l'elemento che deve ricevere lo stato attivo in base alla direzione di spostamento specificata (non può essere usata con lo spostamento delle schede, vedere osservazioni).

FindNextFocusableElement(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.

GetFocusedElement()

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

GetFocusedElement(XamlRoot)

Recupera l'elemento incentrato 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)

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

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

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

TryMoveFocusAsync(FocusNavigationDirection)

Tenta in modo asincrono di modificare lo stato attivo dall'elemento corrente con lo stato attivo all'elemento attivo 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 attivo successivo nella direzione specificata e soggetto alle opzioni di spostamento specificate.

Eventi

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 sta 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 si sposta 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 sta 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 essere spostato di nuovo prima del completamento del bubbling.

Si applica a

Vedi anche