2009-10-20 64 views
7

我想將樣式應用於派生自Control的所有類。這可能與WPF? 以下示例不起作用。我希望標籤,文本框和按鈕的邊距爲4.將樣式應用於WPF中的所有派生類

<Window x:Class="WeatherInfo.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Wetterbericht" Height="300" Width="300"> 
    <Window.Resources> 
     <Style TargetType="Control"> 
      <Setter Property="Margin" Value="4"/> 
     </Style> 
    </Window.Resources> 
    <Grid> 
     <StackPanel Margin="4" HorizontalAlignment="Left">    
      <Label>Zipcode</Label> 
      <TextBox Name="Zipcode"></TextBox> 
      <Button>get weather info</Button> 
     </StackPanel> 
    </Grid> 
</Window> 

回答

10

這裏有一個解決方案:

<Window.Resources> 
    <Style TargetType="Control" x:Key="BaseStyle"> 
     <Setter Property="Margin" Value="4"/> 
    </Style> 
    <Style BasedOn="{StaticResource BaseStyle}" TargetType="Button" /> 
    <Style BasedOn="{StaticResource BaseStyle}" TargetType="Label" /> 
    <Style BasedOn="{StaticResource BaseStyle}" TargetType="TextBox" /> 
</Window.Resources> 
<Grid> 
    <StackPanel Margin="4" HorizontalAlignment="Left"> 
     <Label>Zipcode</Label> 
     <TextBox Name="Zipcode"></TextBox> 
     <Button>get weather info</Button> 
    </StackPanel> 
</Grid> 
+0

的作品就像一個魅力...謝謝你。 – Sebastian 2009-10-20 10:07:49

6

這在WPF中是不可能的。您有幾個選項可以幫助您:

  1. 使用BasedOn屬性創建基於另一個樣式的一種樣式。
  2. 將公共信息(本例中爲邊距)移動到資源中,並根據您創建的每種樣式引用該資源。

1例

<Style TargetType="Control"> 
    <Setter Property="Margin" Value="4"/> 
</Style> 

<Style TargetType="TextBox" BasedOn="{StaticResource {x:Type Control}}"> 
</Style> 

<Thickness x:Key="MarginSize">4</Thickness> 

<Style TargetType="TextBox"> 
    <Setter Property="Margin" Value="{StaticResource MarginSize}"/> 
</Style> 
相關問題