FocusManager Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
- 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. |