wpf - 容器内的隐式样式

标签 wpf xaml wpf-style implicit-style

我要申请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>

最佳答案

您可以像这样在 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 LabelStyledPanelStackPanel 都使用标签样式。

关于wpf - 容器内的隐式样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45178606/

相关文章:

c# - 从未调用过 MouseLeftButtonDown 处理程序

wpf - MVVM Light DataGrid 绑定(bind)

c# - 如何为 WPF 饼图中的饼图切片设置默认颜色

c# - 如何编写具有某些功能的 DataTemplate 作为资源

c# - 将具有 Visibility.Visible 的样式应用于隐藏控件不起作用。

c# - 替换 ObservableCollection 的项目时如何收到通知

c# - WPF Windows 8 兼容性问题

c# - wpf xaml 绑定(bind)到在代码隐藏中创建的对象

c# - WPF 图像源绑定(bind)有时有效有时无效

wpf - 如何将TabControl样式应用到特定的选项卡控件?