WPF - Groupbox标头对齐

时间:2014-04-10 07:38:14

标签: wpf xaml alignment groupbox

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

goal http://imagizer.imageshack.us/a/img829/189/15iy.png

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

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

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>

您怎么看?

1 个答案:

答案 0 :(得分:4)

默认情况下,标题左对齐GroupBox标题。但在您的情况下,您希望几个部分保持对齐,而且很少需要覆盖ControlTemplate的groupBox标头,如定义的herehere


但是,您可以强制 Grid to stretch horizontally ,以便可以将按钮放在右侧。但是正如你在快照中看到的那样,边框线被标记内容隐藏起来,所以你可能得到这样的东西:

enter image description here

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

<强> 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;
    }
}