Группы WPF ListView повторяют заголовки столбцов

Есть ли способ повторить заголовки столбцов внутри каждой группы ListView.GridView при использовании сгруппированного CollectionViewSource в качестве источника ListView?

Я использую пример на http://msdn.microsoft.com/en-us/library/ms754027.aspx, который использует элемент управления Expander для отображения каждой группы.

Я хотел бы, чтобы заголовки столбцов отображались внутри расширителя для каждой группы, а не в верхней части ListView.


person rikoe    schedule 15.06.2010    source источник


Ответы (1)


Я не пробовал это, но вы можете включить 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, который ссылается на единственный и неповторимый GridViewHeaderRowPresenter в верхней части GridView.

Это можно сделать с помощью прикрепленного свойства, которое будет использоваться в прямоугольнике. Когда прикрепленное свойство установлено, оно регистрирует обратный вызов Dispatcher с низким приоритетом, который:

  1. Сканирует визуальное дерево до ListView
  2. Выполняет поиск до тех пор, пока не найдет GridViewHeaderRowPresenter.
  3. Создайте VisualBrush и установите его в качестве заливки для прямоугольника и

Сам прямоугольник будет примерно таким:

<Rectangle HorizontalAlignment="Stretch"
           Height="{Binding Fill.Visual.RenderHeight}"
           my:GridViewHeaderHelper.SearchForHeaderRowPresenterAndSetFill="True" />
person Ray Burns    schedule 16.06.2010
comment
Рэй, спасибо большое, это прекрасно! Вы не можете требовать от ответа большего, чем это, я скопировал XAML в свой групповой стиль, и он сразу же заработал. Качество. Кстати, я рад, что использование GridViewHeaderRowPresenter в заголовках моей группы помогло, потому что второе предложенное вами решение показалось немного более сложным... - person rikoe; 16.06.2010