2013-08-12 15 views
5

Sono nuovo nell'utilizzo di WPF e stavo tentando di applicare Style (ad esempio Sfondo per TextBox, Button e MenuItem deve essere arancione). Per raggiungere questo obiettivo ho fatto qualcosa di simile:Applicare lo stesso stile a più elementi

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

e ripetuto lo stesso pezzo di codice per TargetType Button e per il menu di destinazione. Funziona perfettamente. Ma vorrei minimizzare la quantità di codice ripetuto probabilmente avendo più valori di targettype.

Per favore fatemi sapere se è possibile.

Grazie.

risposta

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

Grazie. Ci stavo provando da molto tempo. non sapevo che rimuovere il targettype avrebbe fatto la magia :) – ds345

+1

@Deeksha Dovresti anche esaminare la proprietà 'BasedOn' di' Style'. Sono sicuro che lo troverai utile prima o poi. +1 alla risposta di otis23 – Vanlalhriata

2

Si potrebbe utilizzare FrameworkElement come TargetType:

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

e quindi utilizzare stili specifici per ogni elemento da inheriting (BasedOn)CommonStyle:

<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

Ciao, ho provato questo metodo ma dice che Background non è una proprietà valida su FrameworkElemnt. Era applicabile solo il margine su FrameworkElement. – ds345

+0

@Deeksha Aggiornato –

+0

Grazie per la risposta. Si usarlo con Control.Background/qualsiasi proprietà ha risolto il mio problema. – ds345

Problemi correlati