Applicazione di stili per lo stato attivo nei controlli e FocusVisualStyle
In Windows Presentation Foundation (WPF) vengono forniti due meccanismi paralleli per modificare l'aspetto visivo di un controllo che riceve lo stato attivo. Il primo meccanismo consiste nell'utilizzare metodi di impostazione della proprietà per proprietà quali IsKeyboardFocused all'interno dello stile o del modello applicato al controllo. Il secondo consiste nel fornire uno stile separato come valore della proprietà FocusVisualStyle; piuttosto che sostituire la struttura ad albero visuale del controllo o di un altro elemento dell'interfaccia utente, lo "stile di visualizzazione dello stato attivo" crea una struttura ad albero visuale separata per uno strumento decorativo visuale che viene disegnato sopra il controllo. In questo argomento vengono descritti gli scenari appropriati a ciascun meccanismo.
Nel presente argomento sono contenute le seguenti sezioni.
- Scopo dello stile di visualizzazione dello stato attivo
- Comportamento predefinito dello stile di visualizzazione dello stato attivo
- Utilizzo degli stili di visualizzazione dello stato attivo
- Creazione di uno stile di visualizzazione dello stato attivo
- Alternative all'utilizzo di uno stile di visualizzazione dello stato attivo
- Argomenti correlati
Scopo dello stile di visualizzazione dello stato attivo
La funzionalità dello stile di visualizzazione dello stato attivo fornisce un "modello a oggetti" comune per introdurre un feedback utente visivo, basato sul passaggio tramite tastiera a un qualsiasi elemento dell'interfaccia utente. A tal fine, non è necessario applicare un nuovo modello al controllo né conoscere la composizione specifica del modello.
Tuttavia, dal momento che la funzionalità dello stile di visualizzazione dello stato attivo funziona a prescindere dai modelli di controllo, il feedback visivo che è possibile visualizzare per un controllo che utilizza uno stile di visualizzazione dello stato attivo è necessariamente limitato. La funzionalità sovrappone una struttura ad albero visuale diversa (uno strumento decorativo visuale) sulla struttura ad albero visuale creata dal rendering di un controllo tramite il relativo modello. Tale struttura ad albero visuale separata viene definita utilizzando uno stile che consente di compilare la proprietà FocusVisualStyle.
Comportamento predefinito dello stile di visualizzazione dello stato attivo
Gli stili di visualizzazione dello stato attivo funzionano solo quando l'azione dello stato attivo è stata iniziata dalla tastiera. Qualsiasi azione del mouse o modifica dello stato attivo a livello di codice disabilita la modalità degli stili di visualizzazione dello stato attivo. Per ulteriori informazioni sulle differenze tra le modalità dello stato attivo, vedere Cenni preliminari sullo stato attivo.
I temi dei controlli includono un comportamento predefinito dello stile di visualizzazione dello stato attivo che diventa lo stile di visualizzazione dello stato attivo per tutti i controlli del tema. Questo stile del tema viene identificato mediante il valore della chiave statica FocusVisualStyleKey. Quando si dichiara lo stile di visualizzazione dello stato attivo specifico a livello di applicazione, il comportamento dello stile predefinito viene sostituito dai temi. In alternativa, se si definisce il tema completo, è necessario utilizzare questa stessa chiave per definire lo stile del comportamento predefinito per tutto il tema.
Nei temi, lo stile di visualizzazione dello stato attivo predefinito in genere è molto semplice. Di seguito è riportata un'approssimazione generica:
<Style x:Key="{x:Static SystemParameters.FocusVisualStyleKey}">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle StrokeThickness="1"
Stroke="Black"
StrokeDashArray="1 2"
SnapsToDevicePixels="true"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Utilizzo degli stili di visualizzazione dello stato attivo
Dal punto di vista concettuale, l'aspetto degli stili di visualizzazione dello stato attivo applicati ai controlli deve essere coerente da un controllo all'altro. Un modo per garantire la coerenza consiste nel modificare lo stile di visualizzazione dello stato attivo solo se si sta componendo un tema completo, in cui ciascun controllo definito nel tema ottiene lo stesso stile di visualizzazione dello stato attivo o una variazione di uno stile che mantiene una certa coerenza, da un punto di vista visivo, tra i vari controlli. In alternativa, è possibile utilizzare lo stesso stile (o stili simili) al fine di assegnare uno stile a ciascun elemento della pagina o di un'interfaccia utente in grado di ricevere lo stato attivo tramite tastiera.
L'impostazione di FocusVisualStyle su stili di controllo singoli che non fanno parte di un tema non rappresenta l'utilizzo previsto degli stili di visualizzazione dello stato attivo. Infatti, un comportamento visivo incoerente tra controlli può comportare confusione nell'esperienza utente relativamente allo stato attivo. Se per lo stato attivo si stanno prendendo in considerazione comportamenti specifici del controllo deliberatamente incoerenti all'interno di un tema, un approccio migliore consiste nell'utilizzare i trigger negli stili per le singole proprietà dello stato di input, quali IsFocused o IsKeyboardFocused.
Gli stili di visualizzazione dello stato attivo funzionano esclusivamente per lo stato attivo da tastiera e come tali, costituiscono un tipo di funzionalità di accessibilità. Se si desidera apportare modifiche all'interfaccia utente per qualsiasi tipo di stato attivo, tramite mouse, tastiera o a livello di codice, non è necessario utilizzare gli stili di visualizzazione dello stato attivo, bensì i metodi di impostazione e i trigger all'interno degli stili o dei modelli che utilizzano il valore delle proprietà generali dello stato attivo, ad esempio IsFocused o IsFocusWithin.
Creazione di uno stile di visualizzazione dello stato attivo
Lo stile creato per uno stile di visualizzazione dello stato attivo deve sempre disporre della proprietà TargetType dell'oggetto Control. Lo stile deve essere costituito principalmente da ControlTemplate. Il tipo di destinazione non viene specificato come tipo in cui lo stile di visualizzazione dello stato attivo viene assegnato a FocusVisualStyle.
Dal momento che il tipo di destinazione è sempre Control, è necessario assegnare uno stile utilizzando le proprietà comuni a tutti i controlli (vale a dire le proprietà della classe Control e delle classi base). È necessario creare un modello che funzioni correttamente come sovrapposizione a un elemento dell'interfaccia utente e che non nasconda le aree funzionali del controllo. In genere, in questo modo il feedback visivo viene visualizzato all'esterno dei margini del controllo o sotto forma di effetti temporanei o non intrusivi che non bloccano l'hit testing sul controllo in cui viene applicato lo stile di visualizzazione dello stato attivo. Le proprietà che è possibile utilizzare nell'associazione di modelli utili per determinare il ridimensionamento e il posizionamento del modello di sovrapposizione includono ActualHeight, ActualWidth, Margine Padding.
Alternative all'utilizzo di uno stile di visualizzazione dello stato attivo
Per le situazioni in cui non è appropriato utilizzare uno stile di visualizzazione dello stato attivo in quanto si sta assegnando uno stile solo a singoli controlli o perché si desidera un controllo maggiore sul modello di controllo, sono disponibili molte altre proprietà e tecniche accessibili che consentono di creare un comportamento visivo in risposta alle modifiche apportate allo stato attivo.
I trigger, i metodi di impostazione generali e quelli degli eventi vengono descritti dettagliatamente in Applicazione di stili e modelli. La gestione degli eventi indirizzati viene descritta in Cenni preliminari sugli eventi indirizzati.
IsKeyboardFocused
Se si è interessati in modo specifico allo stato attivo, la proprietà di dipendenza IsKeyboardFocused può essere utilizzata per una proprietà Trigger. Il trigger di una proprietà in uno stile o in un modello rappresenta una tecnica più appropriata per la definizione di un comportamento dello stato attivo specifico per un singolo controllo, che non potrebbe corrispondere visivamente al comportamento dello stato attivo di altri controlli.
Un'altra proprietà di dipendenza simile è IsKeyboardFocusWithin, che potrebbe essere utilizzata se si desidera evidenziare visivamente che lo stato attivo si trova in qualche punto all'interno dell'area di composizione o all'interno dell'area funzionale del controllo. Ad esempio, si potrebbe inserire un trigger IsKeyboardFocusWithin in modo che un pannello in cui sono raggruppati più controlli venga visualizzato in maniera diversa, anche quando lo stato attivo si trova più specificamente su un elemento all'interno di tale pannello.
È inoltre possibile utilizzare gli eventi GotKeyboardFocus e LostKeyboardFocus (nonché i relativi eventi Preview equivalenti). È possibile utilizzare questi eventi come base di EventSetter oppure creare dei gestori per gli eventi nel code-behind.
Altre proprietà dello stato attivo
Se si desidera fare in modo che tutte le possibili cause di modifica dello stato attivo generino un comportamento visivo, è necessario basare un metodo di impostazione o un trigger sulla proprietà di dipendenza IsFocused o in alternativa sugli eventi GotFocus o LostFocus utilizzati per un oggetto EventSetter.
Vedere anche
Riferimenti
Concetti
Applicazione di stili e modelli
Cenni preliminari sullo stato attivo