WPF - 组框标题对齐

Posted

技术标签:

【中文标题】WPF - 组框标题对齐【英文标题】:WPF - Groupbox header alignment 【发布时间】:2014-05-23 18:44:40 【问题描述】:

在 WPF 应用程序中,我想为我的 groupbox 实现类似的功能:

目标是为标题创建一个模板,只是为了在左侧显示一些内容(复选框 + 文本),在右侧显示一些内容(按钮)。

不幸的是,我唯一得到的是:

what I get http://imageshack.com/a/img513/706/fiaq.png

我不想以编程方式执行此操作,而是 XAML 中的所有内容(尽可能简洁)。我的意思是,使用网格、列定义等...不处理在调整窗口大小时会崩溃的边距。

我正在使用的 XAML(三列网格):

<GroupBox Margin="5">
        <GroupBox.Header>
            <Grid>

                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="15"></ColumnDefinition>
                    <ColumnDefinition Width="100*"></ColumnDefinition>
                    <ColumnDefinition Width="Auto"></ColumnDefinition>
                </Grid.ColumnDefinitions>

                <CheckBox Grid.Column="0"></CheckBox>
                <TextBlock Grid.Column="1" Margin="5,0,5,0" Text="This is my groupbox"></TextBlock>
                <Button Content="Click" FontSize="8" Background="Yellow" Grid.Column="2" Height="16" Width="54"></Button>

            </Grid>
        </GroupBox.Header>
    </GroupBox>

你怎么看?

【问题讨论】:

看来您需要编辑GroupBox的默认模板。相关问题:WPF Groupbox header postion alignment 【参考方案1】:

默认情况下,GroupBox 标头的标头左对齐。但是在您的情况下,您希望很少有部分左对齐,并且很少需要正确覆盖 groupBox 标头的ControlTemplate,例如定义的herehere


但是,您可以强制 Grid to stretch horizontally 使按钮可以放在右侧。但正如您在快照中看到的那样,标题内容的边框线会被隐藏,因此您可能会得到如下内容:

实现这一点的相关代码将是:

XAML

<GroupBox Margin="5" x:Name="groupBox"
          xmlns:local="clr-namespace:NamespaceOfConverter">
    <GroupBox.Resources>
        <local:SubtractionConverter x:Key="SubtractionConverter"/>
    </GroupBox.Resources>
    <GroupBox.Header>
        <Grid Width="Binding ActualWidth, ElementName=groupBox,
                      Converter=StaticResource SubtractionConverter">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="15"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <CheckBox Grid.Column="0"/>
            <TextBlock Grid.Column="1" Margin="5,0,5,0"
                       Text="This is my groupbox"/>
            <Button Content="Click" FontSize="8" Background="Yellow"
                    HorizontalAlignment="Right" Grid.Column="2"
                    Height="16" Width="54"/>
        </Grid>
    </GroupBox.Header>
</GroupBox>

转换器

public class SubtractionConverter : IValueConverter

    public object Convert(object value, Type targetType, object parameter, 
                          System.Globalization.CultureInfo culture)
    
        return (double)value - 25.0;
    

    public object ConvertBack(object value, Type targetType, object parameter, 
                              System.Globalization.CultureInfo culture)
    
        return Binding.DoNothing;
    

【讨论】:

它就像一个魅力!顶部边界线有一些问题,但足以满足我的需求。非常感谢!

以上是关于WPF - 组框标题对齐的主要内容,如果未能解决你的问题,请参考以下文章

WPF ListBox WPF XAML 内的顶部对齐

是否可以在 WPF TabControl 中左对齐标题?

WPF ContextMenu 文本对齐

WPF StackPanel 内容垂直对齐

流文档阅读器的对齐问题 - WPF

WPF Dockpanel 不会正确对齐