2009-06-03 19 views
8

ho uno stile globale che imposta tutte le mie TextBox stili, ma in alcuni casi voglio tornare solo il colore di primo piano al colore originale non-custom in stile. Ho provato a utilizzare {TemplateBinding Foreground} all'interno dello specifico TextBoxes che volevo ripristinare. Non è diventato XAML valido e non sono sicuro che sia comunque il modo giusto.Applicare predefinito stile WPF

Qualche idea? Grazie.

risposta

11

Ci sono alcuni modi in cui questo potrebbe essere fatto. Se si guarda il numero Precedence List su MSDN , allora si può vedere che il set Forground nei modi 1-8 sostituisce lo Foreground con uno stile predefinito. Il modo più semplice consiste semplicemente nell'impostare il valore locale nello TextBox.

<TextBox Foreground="Red" /> 

Un'altra cosa che si può fare è utilizzare la proprietà 'BasedOn' di stili per ignorare le altre versioni. Ciò richiede che dà un valore chiave per il vostro stile di default, ma che può quindi essere utilizzato per applicare anche il default come in questo esempio:

<Style TargetType="{x:Type TextBox}" 
      x:Key="myTextBoxStyle"> 
     <Setter Property="Foreground" 
       Value="Red" /> 
     <Setter Property="FontWeight" 
       Value="Bold" /> 
    </Style> 
    <!-- Style applies to all TextBoxes --> 
    <Style TargetType="{x:Type TextBox}" 
      BasedOn="{StaticResource myTextBoxStyle}" /> 


<TextBox Text="Hello"> 
    <TextBox.Style> 
     <Style BasedOn="{StaticResource myTextBoxStyle}" TargetType="{x:Type TextBox}"> 
      <Setter Property="Foreground" 
        Value="Blue" /> 
     </Style> 
    </TextBox.Style> 
</TextBox> 


Edit:
Nel caso in cui lo stile di default si sta applicando un valore e si desidera ripristinare il valore di base ci sono alcuni modi in cui posso pensare, a mano libera, per ottenere questo comportamento. Non puoi, che io sappia, tornare al valore di tema predefinito in maniera generica.

Possiamo tuttavia fare alcune altre cose. Se abbiamo bisogno che lo stile non applichi alcune proprietà, possiamo impostare lo stile su {x:Null}, impedendo così l'applicazione dello stile predefinito. Oppure possiamo dare l'elemento proprio stile che non eredita dallo stile di base e poi ri-applicare solo i setter di cui abbiamo bisogno:

 <TextBox Text="Hello" Style="{x:Null}" /> 
     <TextBox Text="Hello"> 
      <TextBox.Style> 
       <Style TargetType="{x:Type TextBox}"> 
        <Setter Property="FontWeight" 
          Value="Bold" /> 
       </Style> 
      </TextBox.Style> 
     </TextBox> 

Potremmo modificare lo stile di default in modo che il primo piano verrà impostato solo in determinate condizioni, ad esempio il Tag ha un determinato valore.

<Style TargetType="{x:Type TextBox}" 
      x:Key="myTextBoxStyle"> 
     <Setter Property="FontWeight" 
       Value="Bold" /> 
     <Style.Triggers> 
      <Trigger Property="Tag" 
        Value="ApplyForeground"> 
       <Setter Property="Foreground" 
         Value="Red" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

    <TextBox Text="Hello" /> 
    <TextBox Text="Hello" Tag="ApplyForeground" /> 
+1

Nel tuo esempio, non voglio specificare "Blu". Voglio fare qualcosa come . Voglio il suo default senza dire esplicitamente Value = "Black". – xanadont

+0

Ah, questo è davvero un po 'diverso. Modificherò la mia risposta per gestire quel caso. – rmoore

+0

Risulta che il mio problema era un po 'diverso da quello che ho descritto. Era davvero una questione di stile applicato ai TextBox in un ListView. Ma accetterò questa risposta per darti un po 'di succo SO visto che hai fatto un ottimo lavoro spiegando. Grazie! – xanadont

Problemi correlati