2017-07-18 74 views
3

我想將Padding="0"應用於左側邊欄上的每個Label(第一個StackPanel),以便它與每個TextBox(和其他控件)左對齊。容器內的隱式樣式

如何在<ApplicationResources>中定義隱式樣式,該樣式僅適用於特定容器中的元素?

替代方案:

  1. 使用x:Key="sidebarLabel"。但是,對於我的實際應用程序邊欄中的許多標籤,此選項似乎是多餘的。
  2. Padding=0添加到邊欄中的每個Label。這與之前的選擇基本相同。
  3. 將隱式樣式移動到<StackPanel.Resources>。但是,我想將樣式(在App.xaml)與XAML分開(在MainWindow.xaml中)。

 

<Application.Resources> 
    <Style TargetType="{x:Type Label}"> 
     <Setter Property="Padding" Value="0" /> 
    </Style> 
</Application.Resources>  

 

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="2*"/> 
    </Grid.ColumnDefinitions> 

    <StackPanel Grid.Column="0"> 
     <GroupBox Header="New User"> 
      <StackPanel> 
       <Label>First Name:</Label> 
       <TextBox/> 
       <Label>Last Name:</Label> 
       <TextBox/> 
      </StackPanel> 
     </GroupBox> 
    </StackPanel> 
    <GroupBox Grid.Column="1" Header="Main"> 
     <StackPanel> 
      <Label>I want default padding here</Label> 
     </StackPanel> 
    </GroupBox> 
</Grid> 

回答

3

可以使用Style.Resources在App.xaml中是這樣的:

<Application.Resources> 
    <Style TargetType="StackPanel"> 
     <Style.Resources> 
      <Style TargetType="Label"> 
       <Setter Property="Padding" Value="0" /> 
      </Style> 
     </Style.Resources> 
    </Style> 
</Application.Resources> 

此設置所有Label.Style,這將在內部使用一個StackPanel。如果您想提供這種行爲只有在特定StackPanels標籤,你可以使用一個x:Key這樣的:

<Application.Resources> 
    <Style TargetType="StackPanel" x:Key="LabelStyledPanel"> 
     <Style.Resources> 
      <Style TargetType="Label"> 
       <Setter Property="Padding" Value="0" /> 
      </Style> 
     </Style.Resources> 
    </Style> 
</Application.Resources> 

那麼所有StackPanels使用StaticResource LabelStyledPanel使用標籤樣式。