【问题标题】:Horizontal alignment issues using WPF ItemsControl and CollectionView使用 WPF ItemsControl 和 CollectionView 的水平对齐问题
【发布时间】:2012-02-23 09:12:10
【问题描述】:

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

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>

【问题讨论】:

    标签: wpf itemscontrol alignment collectionview groupstyle


    【解决方案1】:

    GroupItemTemplate 添加到GroupStyle

    <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没用,已经是默认了)

    【讨论】:

      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2020-01-08
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多