容器内的隐式样式

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

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

替代方案:

  1. 使用 x:Key="sidebarLabel"。但是,在我的实际应用程序中,侧边栏中的许多标签使这个选项显得冗余。
  2. 在侧边栏中的每个 Label 上添加 Padding=0。这本质上与前一个替代方案相同。
  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>
1个回答

5
您可以在 app.xaml 中像这样使用 Style.Resources
<Application.Resources>
    <Style TargetType="StackPanel">
        <Style.Resources>
            <Style TargetType="Label">
                <Setter Property="Padding" Value="0" />
            </Style>
        </Style.Resources>
    </Style>
</Application.Resources>

这将设置在StackPanel中使用的所有Label.Style。如果您只想针对特定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>

此时所有使用StaticResource LabelStyledPanelStackPanels都将使用标签样式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接