2012-01-31 45 views
1

我有一個非常簡單的代表人物的列表。每個對象都有一個Sex和一個Name。以下代碼顯示按性別正確分組的人員列表,但組中的每個項目似乎都有某種水平填充。我該如何刪除它,以便組標題和每個組內的項目都與垂直齊平?使用WPF ItemsControl和CollectionView的水平對齊問題

C#代碼:

using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Data; 
using System.ComponentModel; 

namespace ComboBoxColour 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
    private CollectionViewSource _viewSource; 
    public ICollectionView CollectionView { get; set; } 

    public List<Person> people; 
    public List<Person> People 
    { 
     get { return people; } 
     set { people = value; } 
    } 

    public MainWindow() 
    { 
     this.DataContext = this; 

     People = new List<Person>(); 
     People.Add(new Person("Alice", SexEnum.Female)); 
     People.Add(new Person("Bob", SexEnum.Male)); 
     People.Add(new Person("Claire", SexEnum.Female)); 
     People.Add(new Person("Daniel", SexEnum.Male)); 

     this._viewSource = new CollectionViewSource { Source = this.People }; 
     this.CollectionView = this._viewSource.View; 

     this.CollectionView.GroupDescriptions.Clear(); 
     this.CollectionView.SortDescriptions.Clear(); 

     this.CollectionView.GroupDescriptions.Add(new PropertyGroupDescription("Sex")); 
     this.CollectionView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); 

     InitializeComponent(); 
    } 
    } 

    public enum SexEnum{Male,Female}; 

    public class Person 
    { 
    private string name; 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    private SexEnum sex; 
    public SexEnum Sex 
    { 
     get { return sex; } 
     set { sex = value; } 
    } 

    public Person(string Name, SexEnum Sex) 
    { 
     this.Name = Name; 
     this.Sex = Sex; 
    } 
    } 
} 

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> 

回答

2

更改GroupItem的通過將該給GroupStyleTemplate

<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是無用順便說一下,th at已經是默認了)

+0

太好了,謝謝! – JamesPD 2012-02-01 10:21:07