2017-07-18 70 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使用标签样式。