容器内的隐式样式
Implicit Style Within Container
我想将 Padding="0"
应用于左侧边栏(第一个 StackPanel
)上的每个 Label
,以便它与每个 TextBox
(以及其他控制)。
如何在 <ApplicationResources>
中定义仅适用于特定容器内元素的隐式样式?
备选方案:
- 使用
x:Key="sidebarLabel"
。然而,这个选项对于我实际应用的侧边栏中的许多标签来说似乎是多余的。
- 将
Padding=0
添加到边栏中的每个 Label
。这与之前的替代方案基本相同。
- 将隐式样式移至
<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>
您可以像这样在 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>
然后所有StackPanels
使用StaticResource LabelStyledPanel
使用标签样式。
我想将 Padding="0"
应用于左侧边栏(第一个 StackPanel
)上的每个 Label
,以便它与每个 TextBox
(以及其他控制)。
如何在 <ApplicationResources>
中定义仅适用于特定容器内元素的隐式样式?
备选方案:
- 使用
x:Key="sidebarLabel"
。然而,这个选项对于我实际应用的侧边栏中的许多标签来说似乎是多余的。 - 将
Padding=0
添加到边栏中的每个Label
。这与之前的替代方案基本相同。 - 将隐式样式移至
<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>
您可以像这样在 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>
然后所有StackPanels
使用StaticResource LabelStyledPanel
使用标签样式。