2011-01-16 13 views
6

Chiedendosi se è possibile, ad es. se rimuovo il bordo da un TextBox e voglio avere il suo bordo predefinito indietro quando il mouse è sopra esso.È possibile utilizzare un setter per restituire una proprietà al suo valore predefinito?

<Style TargetType="TextBox"> 
     <Setter Property="BorderBrush" Value="{x:Null}"/> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="BorderBrush" Value="?????"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

ho pensato che avrei potuto utilizzare tale ma alla fine mi sembrava una cattiva idea per nascondere il confine, ma la questione rimane. (So ​​che in questo caso potrei invertire il Trigger per rimuovere solo il bordo se il mouse non è sopra il TextBox)

+0

Definire il valore predefinito. Intendi il valore predefinito assegnato ai metadati 'DependencyProperty' sottostanti? –

+0

Immagino di sì, in termini descrittivi: Qualunque cosa viene utilizzata se non dovessi mai impostare la proprietà. –

+0

"So che in questo caso potrei invertire il Trigger per rimuovere solo il bordo se il mouse non si trova sul TextBox" - in quali casi non è possibile? –

risposta

5

Non funziona davvero così. Il sistema DependencyProperty funziona considerando numerose fonti di valore diverse. E come puoi vedere here, i setter di stile e i trigger di stile sono considerati fonti separate. (Sono numerati 8 e 6 rispettivamente nella sezione "Elenco delle priorità di impostazione delle proprietà di dipendenza".) Qualunque delle fonti di valore attivo abbia la priorità più alta vince.

Le origini di proprietà di un tipo non possono rimuovere il valore fornito da una fonte diversa. L'unica ragione per cui i trigger sono in grado di cambiare il valore da ciò che un settatore imposta è che i trigger hanno una priorità più alta. Non c'è potere di sradicare un valore fornito da una fonte con priorità più bassa.

Il modo per raggiungere l'obiettivo specifico che hai espresso qui sarebbe quello di invertire il senso del trigger - non definire un setter di stile e attivare il trigger solo quando IsMouseOver è falso. Naturalmente, questo non ti aiuterà in tutti i possibili casi in cui potresti voler fare questo. Ma dal momento che non esiste una soluzione generale, penso che avresti bisogno di risolvere ogni problema specifico a modo suo.

+0

Buono a sapersi su quelle precedenti, grazie per la risposta. –