2012-01-31 10 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

변경 GroupStyle이 추가하여 GroupItemTemplate :

<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