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