使用WPF ItemsControl和CollectionView的水平对齐问题

使用WPF ItemsControl和CollectionView的水平对齐问题,wpf,itemscontrol,alignment,collectionview,groupstyle,Wpf,Itemscontrol,Alignment,Collectionview,Groupstyle,我有一个非常简单的表示人的对象列表。每个物体都有性别和名称。下面的代码显示了按性别正确分组的人员列表,但组中的每个项目似乎都有某种水平填充。如何删除此项,以便组标题和每个组中的项目都与垂直方向齐平 C#代码: 使用System.Collections.Generic; 使用System.Windows; 使用System.Windows.Data; 使用系统组件模型; 名称空间组合框颜色 { /// ///MainWindow.xaml的交互逻辑 /// 公共部分类主窗口:窗口 { 私有集合

我有一个非常简单的表示人的对象列表。每个物体都有性别和名称。下面的代码显示了按性别正确分组的人员列表,但组中的每个项目似乎都有某种水平填充。如何删除此项,以便组标题和每个组中的项目都与垂直方向齐平

C#代码:

使用System.Collections.Generic;
使用System.Windows;
使用System.Windows.Data;
使用系统组件模型;
名称空间组合框颜色
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
私有集合viewSource _viewSource;
公共ICollectionView集合视图{get;set;}
公众人物名单;
公众人物名单
{
获取{返回人;}
设置{people=value;}
}
公共主窗口()
{
this.DataContext=this;
人员=新列表();
添加(新人物(“Alice”,SexEnum.femal));
添加(新人物(“Bob”,SexEnum.Male));
添加(新人物(“克莱尔”,SexEnum.Female));
添加(新人物(“Daniel”,SexEnum.Male));
这。_viewSource=newcollectionviewsource{Source=this.People};
this.CollectionView=this.\u viewSource.View;
this.CollectionView.GroupDescriptions.Clear();
this.CollectionView.SortDescriptions.Clear();
this.CollectionView.groupdescription.Add(新属性groupdescription(“Sex”);
this.CollectionView.SortDescriptions.Add(新的SortDescription(“Name”,ListSortDirection.升序));
初始化组件();
}
}
公共enum SexEnum{男性,女性};
公共阶层人士
{
私有字符串名称;
公共字符串名
{
获取{返回名称;}
设置{name=value;}
}
私人性行为;
公共性
{
获取{返回性;}
设置{sex=value;}
}
公众人物(字符串名称,SexEnum Sex)
{
this.Name=Name;
这个。性=性;
}
}
}
WPF代码:

<Window x:Class="ComboBoxColour.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel Orientation="Vertical">
        <ItemsControl ItemsSource="{Binding CollectionView}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*" />
                    </Grid.ColumnDefinitions>
                    <Button Content="{Binding Name}" Grid.Column="0"/>
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
        <ItemsControl.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Button Content="{Binding Items[0].Sex}" Grid.Column="0"/>
                        </Grid>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ItemsControl.GroupStyle>
    </ItemsControl>
</StackPanel>
</Window>

通过将其添加到
组样式中,更改
组项目的
模板

<GroupStyle.ContainerStyle>
    <Style TargetType="GroupItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="GroupItem">
                    <StackPanel>
                        <ContentPresenter/>
                        <ItemsPresenter/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</GroupStyle.ContainerStyle>

(顺便说一下,
ItemsPanel
是无用的,这已经是默认值了)

<GroupStyle.ContainerStyle>
    <Style TargetType="GroupItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="GroupItem">
                    <StackPanel>
                        <ContentPresenter/>
                        <ItemsPresenter/>
                    </StackPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</GroupStyle.ContainerStyle>