2012-06-14 3 views
5

Sto lavorando a un'applicazione WPF con molte schermate e ogni schermata ha molti controlli su di essa. Diventa molto difficile determinare quale controllo ha il focus.Evidenzia un controllo WPF quando diventa attivo

Quindi voglio evidenziare il controllo che attualmente si concentra su di esso. Potrebbe essere una casella di testo, un pulsante, una casella combinata, una casella di riepilogo o una griglia.

Sarebbe meglio se potessimo farlo usando stili e trigger.

Grazie

risposta

7

È necessario utilizzare un trigger per l'evento giusto. Nel tuo caso è IsFocused. Esempio semplice:

<Trigger Property="IsFocused" Value="true"> 
    <Setter Property="BorderBrush" Value="Red" /> 
    <Setter Property="BorderThickness" Value="1" /> 
</Trigger> 

è necessario utilizzare un tag Style, se si desidera applicare questo stile per un particolare tipo di controllo(utilizzare TargetType="{x:Type TextBox}", per esempio).

Se si desidera applicare alle tutto il controllo tipi nell'applicazione, che si dovrebbe considerare l'utilizzo di uno stile di base con solo questo tipo di grilletto e non solo ereditare nei vostri stili personalizzati con l'aiuto di attributo BasedOn: <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource BaseFocusStyle}">

Un buon esempio di come eseguire questa operazione è una domanda SO: "How to make Style.Triggers trigger a different named style to be applied".

0

Suggerirei di utilizzare stati visivi in ​​stili personalizzati per ogni controllo. Tutti i controlli standard supporteranno questo stato visivo. Ad esempio, controlla lo stile MSDN per button noterai che c'è uno stato visivo per Focused. This L'articolo MSDN potrebbe anche aiutarti.

0

È inoltre possibile provare e creare un adorner per questo comportamento; nel caso in cui si sono aperte da usare biblioteca festa open source 3'rd poi dare un'occhiata a questa implementazione su CodePlex, si può anche passare il codice per avere idea su come implementare il proprio strumento decorativo -

http://uiannotations.codeplex.com/wikipage?title=Adorners&referringTitle=Documentation

enter image description here

Un'altra domanda simile con i dettagli sulle altre soluzioni - Reusable way to put a bright red box around whatever element currently has focus?