3

我想应用Padding="0"Label左侧边栏上的每个(第一个StackPanel),以便它与每个TextBox(和其他控件)左对齐。

如何定义<ApplicationResources>仅适用于特定容器内元素的隐式样式?

备择方案:

  1. 使用x:Key="sidebarLabel". 但是,对于我实际应用程序侧栏中的许多标签,此选项似乎是多余的。
  2. 添加Padding=0到侧栏中的每个Label。这与之前的替代方案基本相同。
  3. 将隐式样式移入<StackPanel.Resources>. 但是,我想将样式 (in App.xaml) 与 XAML (in ) 分开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>
4

1 回答 1

4

您可以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在 a 中使用的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使用标签样式。

于 2017-07-19T04:25:39.150 回答