Condividi tramite


FocusManager Classe

Definizione

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

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

Requisiti Windows

Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)

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 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 "overlay" visivi, 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 contiene StackPanel3, che a sua volta contiene Button5. Quando IsOpen è impostato su true e lo stato attivo passa da Button1 a Button5, gli eventi LostFocus e LostFocus si spostano verso l'alto nell'albero visivo (StackPanel1, grid e Page ottengono entrambi questi eventi). Tuttavia, solo StackPanel3 riceve gli eventi GettingFocus e GotFocus successivi che si mettono in bolla da Button5 (Grid e Page non sono 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.

Cronologia delle versioni

Versione di Windows Versione dell'SDK Valore aggiunto
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)

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 utilizzato con lo spostamento tramite tabulazione, vedere le 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 suggerimento specificati.

GetFocusedElement()

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

GetFocusedElement(XamlRoot)

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

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

TryMoveFocus(FocusNavigationDirection, FindNextElementOptions)

Tenta di modificare lo stato attivo dall'elemento con stato attivo all'elemento attivabile 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 attivabile successivo nella direzione specificata.

TryMoveFocusAsync(FocusNavigationDirection, FindNextElementOptions)

Tenta in modo asincrono di modificare lo stato attivo dall'elemento corrente con stato attivo all'elemento attivabile 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 è 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 è 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