容器内的隐式样式
问题描述:
我想将Padding="0"
应用于左侧边栏上的每个Label
(第一个StackPanel
),以便它与每个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>
答
可以使用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
使用标签样式。