1

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

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

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

4

1 回答 1

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,该 VisualBrush 引用 GridView 顶部的唯一 GridViewHeaderRowPresenter。

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

  1. 将可视化树向上扫描到 ListView
  2. 向下搜索直到找到 GridViewHeaderRowPresenter
  3. 构造一个 VisualBrush 并将其设置为 Rectangle 的 Fill,然后

矩形本身将是这样的:

<Rectangle HorizontalAlignment="Stretch"
           Height="{Binding Fill.Visual.RenderHeight}"
           my:GridViewHeaderHelper.SearchForHeaderRowPresenterAndSetFill="True" />
于 2010-06-16T03:03:15.237 回答