2013-08-12 30 views
5

Jestem nowy w używaniu WPF i próbowałem zastosować Style (np. Tło dla TextBox, Button i MenuItem powinno być pomarańczowe). Aby to osiągnąć Zrobiłem coś takiego:Stosowanie tego samego stylu do wielu elementów

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

i powtórzył ten sam kawałek kodu dla TargetType Button i menu docelowego. To działa absolutnie dobrze. Ale chciałbym zminimalizować liczbę powtórzeń kodu, prawdopodobnie mając wiele wartości typu docelowego.

Proszę dać mi znać, jeśli to możliwe.

Dzięki.

Odpowiedz

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

Dziękuję. Próbowałem tego od dłuższego czasu. nie wiedziałem, że usunięcie celu zrobi magię :) – ds345

+1

@Deeksha Powinieneś również zajrzeć do właściwości 'BasedOn' stylu' Style'. Jestem pewien, że prędzej czy później okaże się to przydatne. +1 do odpowiedzi otis23 – Vanlalhriata

2

Można użyć FrameworkElement jako 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> 

a następnie użyć konkretnych stylów dla każdego elementu przez 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

Witam, próbowałem tej metody, ale mówi, że Background nie jest poprawną właściwością w FrameworkElemnt. Miał zastosowanie tylko margines na FrameworkElement. – ds345

+0

@Deeksha Zaktualizowano –

+0

Dziękuję za odpowiedź. Tak, używając go z Control.Background/dowolną właściwością naprawiłem mój problem. – ds345

Powiązane problemy