2013-08-12 31 views
5

WPF'yi kullanmakta yeniyim ve Style'u uygulamak için çalışıyordum (ör. TextBox için arka plan, Button ve MenuItem Turuncu olmalıdır). Bunu başarmak için ben şöyle bir şey yaptı:Aynı stili birden çok öğeye uygulama

<Style TargetType="TextBox" x:Key="sampleTextBox"> 
    <Setter Property="Margin" Value="2"/> 
    <Setter Property="FontFamily" Value="Verdana"/> 
    <Setter Property="FontSize" Value="11px"/> 
    <Setter Property="FontWeight" Value="Bold"/> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" > 
       <GradientStop Color="#FFFFD190" Offset="0.2"/> 
       <GradientStop Color="Orange" Offset="0.85"/> 
       <GradientStop Color="#FFFFD190" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 

ve TargetType Button için ve hedef menüsü için kod aynı parça tekrarladı. Bu kesinlikle çalışıyor. Ancak, tekrarlanan kod miktarını büyük olasılıkla birden çok targettip değerine sahip olarak minimize etmek istiyorum.

Mümkünse lütfen bana bildirin.

Teşekkürler.

cevap

6
<Window.Resources> 
    <Style x:Key="sampleTextBox"> 
     <Setter Property="Control.FontFamily" Value="Verdana"/> 
     <Setter Property="Control.FontSize" Value="11px"/> 
     <Setter Property="Control.FontWeight" Value="Bold"/> 
     <Setter Property="Control.Background"> 
      <Setter.Value> 
       <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" > 
        <GradientStop Color="#FFFFD190" Offset="0.2"/> 
        <GradientStop Color="Orange" Offset="0.85"/> 
        <GradientStop Color="#FFFFD190" Offset="1"/> 
       </LinearGradientBrush> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

<StackPanel> 
    <TextBlock Text="This is a string and it should be wrapped." Style="{StaticResource sampleTextBox}"/> 
    <TextBox Text="This is a string and it should be wrapped." Style="{StaticResource sampleTextBox}"/> 
</StackPanel> 
+0

Teşekkür ederim. Bunu uzun zamandır deniyordum. Targettype'ın kaldırılmasının sihiri yapamayacağını bilemediniz :) – ds345

+1

@Deeksha Ayrıca 'Style''in' BasedOn' özelliğine de bakmalısınız. Eminim er ya da geç yararlı bulacağınızdan eminim. Otis23'ün cevabı +1 – Vanlalhriata

2

Sen TargetType bir şekilde FrameworkElement kullanabilirsiniz:

<Style TargetType="FrameworkElement" x:Key="CommonStyle"> 
    <Setter Property="Control.Background"> 
     <Setter.Value> 
      <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" > 
       <GradientStop Color="#FFFFD190" Offset="0.2"/> 
       <GradientStop Color="Orange" Offset="0.85"/> 
       <GradientStop Color="#FFFFD190" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
</Style> 

Sonra inheriting (BasedOn)CommonStyle her element için spesifik stillerini kullanın:

<Style TergetType="TextBox" BasedOn="{StaticResource CommonStyle}" x:Key="TextBoxStyle"> 
    <Setter Property="Margin" Value="2"/> 
    <Setter Property="FontFamily" Value="Verdana"/> 
    <Setter Property="FontSize" Value="11px"/> 
    <Setter Property="FontWeight" Value="Bold"/> 
</Style> 
+1

Merhaba, Bu yöntemi denedim ancak Background'ın FrameworkElemnt üzerinde geçerli bir özellik olmadığını söylüyor. Sadece FrameworkElement üzerinde marj uygulandı. – ds345

+0

@Deeksha Güncelleme –

+0

Cevabınız için teşekkür ederiz. Evet, Control.Background ile/herhangi bir özelliği kullanarak sorunu giderdim. – ds345

İlgili konular