WPF ListView组重复列标题

时间:2010-06-15 08:59:23

标签: wpf listview expander collectionviewsource

当使用分组的CollectionViewSource作为ListView的源时,有没有办法在ListView.GridView的每个组内重复列标题?

我正在使用http://msdn.microsoft.com/en-us/library/ms754027.aspx的示例,它使用Expander控件来显示每个组。

我希望列标题出现在每个组的扩展器内,而不是在ListView的顶部。

1 个答案:

答案 0 :(得分:3)

我没有尝试过这个,但您可以在组头中包含GridViewHeaderRowPresenters:

<GridViewHeaderRowPresenter
  DataContext="{Binding View, RelativeSource={RelativeSource FindAncestor,ListView,1}}"
  Columns="{Binding Columns}"
  ColumnHeaderContainerStyle="{Binding ColumnHeaderContainerStyle}"
  ColumnHeaderTemplate="{Binding ColumnHeaderTemplate}"
  ColumnHeaderTemplateSelector="{Binding ColumnHeaderTemplateSelector}"
  AllowsColumnReorder="{Binding AllowsColumnReorder}"
  ColumnHeaderContextMenu="{Binding ColumnHeaderContextMenu}"
  ColumnHeaderToolTip="{Binding ColumnHeaderToolTip}"
  SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>

如果这不起作用,一种确定的方法是添加一个用VisualBrush绘制的Rectangle,它引用GridView顶部的唯一GridViewHeaderRowPresenter。

这可以使用要在Rectangle上使用的附加属性来完成。设置附加属性后,它会注册一个低优先级Dispatcher回调:

  1. 将可视树扫描到ListView
  2. 向下搜索,直至找到GridViewHeaderRowPresenter
  3. 构造一个VisualBrush并将其设置为矩形的填充,并
  4. Rectangle本身就是这样的:

    <Rectangle HorizontalAlignment="Stretch"
               Height="{Binding Fill.Visual.RenderHeight}"
               my:GridViewHeaderHelper.SearchForHeaderRowPresenterAndSetFill="True" />