2009-05-01 6 views
5

Il XAML di seguito non funziona (il testo non cambia quando mouse sopra):La proprietà TextBlock Text non può essere impostata tramite trigger di stile se non vuota - perché?

<Window.Resources> 
    <Style TargetType="TextBlock"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="true"> 
       <Setter Property="Text" Value="hover"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 
<Grid> 
    <TextBlock Text="original"/> 
</Grid> 

Ma, se l'attributo di testo manca:

<Grid> 
    <TextBlock/> 
</Grid> 

il testo non cambia al passaggio del mouse. Qualcuno conosce la teoria alla base di questo?

risposta

6

E 'una questione DependencyProperty la precedenza, quando in realtà imposta la proprietà come in:

<TextBlock Text="original"/> 

che ha la precedenza sul valore impostato nel trigger.

vedere

http://msdn.microsoft.com/en-us/library/ms743230.aspx

+0

Questo è un grande collegamento. Spiega un _lot_ di ciò che ho pensato fossero i miei bug e ho appena adottato approcci diversi. –

+0

Anche se potevano progettarlo mentre i setter di stile sono amanti dei valori locali, lo stile _triggers_ sarebbe più alto ... Poiché sia ​​le animazioni che i trigger di dati possono facilmente sovrascrivere il valore locale, anche il trigger di stile dinamico potrebbe rientrare in quella categoria. –