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).
- #80 - Utilizzare un custom resolver per il p2p di WCF
- .NET Framework 3.5 e Visual Studio 2008
- Deployment dei servizi di ADO.NET Data Services
- #27 - Gestione immagini in Silverlight 2.0
- Epression Blend 2 December Preview
- Speciale Silverlight 2.0 Beta 2
- Le novità del .NET Framework 3.5 SP1 in Windows Presentation Foundation
- #46 - Verificare se esiste almeno un determinato oggetto in una lista con la clausola Any di LINQ
- Visual Studio 2010 e .NET Framework 4.0 October 2008 CTP
- Abusi della parola chiave var e poca leggibilità dei generics
- Le novità di WPF 3.5 nel service pack 1
- #71 - Caricare un'associazione in deferred loading con Entity Framework
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!