Ogni elemento visuale con il quale potenzialmente l'utente può interagire è un oggetto che può detenere il focus e ricevere tutti gli input provenienti dalla tastiera. Il meccanismo di gestione è, come per molte caratteristiche di Windows Presentation Foundation, separato da quello di Win32, nuovo, più versatile ed è controllabile mediante le classi FocusManager e KeyboardNavigation.
In particolare, tramite le attached properties è possibile impostare qual è oggetto che detiene il focus da tastiera, univoco per l'intera esperienza dell'utente, e quali sono le zone logiche di focus, anche da XAML. Quest'ultime possono essere molteplici in un'applicazione ed ognuna di essa ha un oggetto detentore del focus che opzionalmente può avere anche il focus da tastiera. Solitamente questi scope si identificano all'interno dei menu e dei gruppi.
L'esempio seguente imposta, con FocusedElement, la textBox di ID name come focus predefinito al caricarsi del Canvas, definisce con IsFocusScope il pannello stesso come contenitore logico di gestione dei focus, e indica con TabNavigation che la navigazione deve iterare continuamente all'interno dello spazio logico quando si preme il tab:
<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" FocusManager.IsFocusScope="True" KeyboardNavigation.TabNavigation="Cycle" FocusManager.FocusedElement="{Binding ElementName=name}"> <TextBox x:Name="name" /> <TextBox x:Name="surname" /> </StackPanel>
Oltre alla navigazione con tab è possibile controllare quella con il control+tab sfruttando l'attached property ControlTabNavigation e quella basata sull'uso delle frecce, sfruttando DirectionalNavigation.
I possibili valori per la navigazione sono:
- Continue: il focus da tastiera passa da uno scope all'altro quando viene raggiunto l'ultimo elemento;
- Cylce: il focus cicla dal primo all'ultimo elemento dello scope e raggiunta la fine o l'inizio, ricomincia da capo;
- Local: il focus si basa sulle impostazioni del contenitore;
- None: non è possibile effettuare una navigazione all'interno dello scope;
- Once: una volta che un elemento dello scope ha ottenuto il focus, la navigazione passa allo scope successivo.
Da codice è possibile impostare il focus sia tramite il metodo Focus esposto dai tipi IInputElement e conoscere se uno di essi detiene il focus con la proprietà IsKeyboardFocused o IsKeyboardFocusWithin (considera anche i figli).
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Build 2015: segui con noi tutte le novità per gli sviluppatori in diretta da San Francisco
- Speciale Windows Live Services: come integrarli nelle proprie applicazioni
- Rilasciata la RTM di SQL Server 2012, la versione Express subito in download
- Build 2014: tutte le novità per gli sviluppatori in diretta da San Francisco
- .NET Managed provider per MySQL
- WS-I approva Basic Profile 1.0
- Due regali dal Tech-Ed USA 2004: WSE 2.0 e VS 2005 Team System
- VS 2005 e SQL Server 2005 Express da scaricare
- Microsoft aggiorna WinFS beta 1 per VS 2005
- Utilizzare CLEditor per consentire l'input di HTML in ASP.NET MVC