2009-06-03 28 views
8

Tüm TextBox stillerimi ayarlayan genel bir stil var, ancak bazı durumlarda yalnızca önplan rengini orijinal olmayan özgün stile geri döndürmek istiyorum. Geri dönmek istediğim TextBoxes'un içinde {TemplateBinding Foreground} kullanmayı denedim. XAML olarak geçerli değildi ve bu doğru şekilde olduğundan emin değilim.Varsayılan WPF stilini uygula

Herhangi bir fikrin var mı? Teşekkürler.

cevap

11

Bunun yapılması için birkaç yol var. MSDN 'da Precedence List'a bakarsanız, Forground'un 1-8. Yollarla ayarlandığını, varsayılan bir stilden Foreground geçersiz kılacağını görebilirsiniz. Yerel değeri sadece TextBox'da ayarlamak en kolay yoldur.

<TextBox Foreground="Red" /> 

Yapabileceğiniz başka bir şey başka sürümler geçersiz kılmak için stilleri 'BasedOn' özelliğini kullanmaktır. Bu varsayılan stil bir anahtar değerini vererek gerektirir, ama bu daha sonra da bu örnekte olduğu gibi, varsayılan uygulamak için kullanılabilir:

<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> 


Düzenleme: halinde
varsayılan stil bir değer uyguluyor ve onu temel değere geri döndürmek istiyorsanız, bu davranışı elde etmek için el altında düşünebildiğim birkaç yol var. Bilemediğim, genel bir şekilde varsayılan tema değerine geri dönemezsiniz.

Başka şeyler de yapabiliriz. Bazı özelliklerin uygulanmaması için stile ihtiyacımız varsa, stili {x:Null} olarak ayarlayabiliriz, böylece varsayılan stili uygulamadan kaldırırız.

 <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> 

Biz varsayılan stili değiştirebilir Ön plan sadece ayarlanacak şekilde: Ya da elemanını sonra taban stilinden devralan etmediği ve söz kendi tarzını ihtiyacımız sadece ayarlayıcıları yeniden uygulayın verebilir Etiket belirli bir değer gibi belirli durumlarda.

<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

Örneğinizde, "Mavi" belirtmek zorunda kalmak istemiyorum. gibi bir şey yapmak istiyorum. Ben varsayılan olarak açıkça = Value = "Black" demeyi istiyorum. – xanadont

+0

Ah, bu gerçekten biraz farklı. Bu davayı ele almak için cevabımı düzenlerim. – rmoore

+0

Sorunum, açıkladığımdan biraz farklıydı. ListView'de TextBox'lara uygulanacak bir stil meselesiydi. Ama bu cevabı açıklamak için böyle harika bir iş yaptığınızdan beri size biraz SO suyu vereceğim. Teşekkürler! – xanadont

İlgili konular