2010-06-15 5 views
1

Existe-t-il un moyen de répéter les en-têtes de colonne à l'intérieur de chaque groupe d'un ListView.GridView lors de l'utilisation d'un groupé CollectionViewSource comme source de ListView?WPF ListView groupes répéter les en-têtes de colonne

J'utilise l'exemple à http://msdn.microsoft.com/en-us/library/ms754027.aspx qui utilise un contrôle Expander pour afficher chaque groupe.

Je souhaite que les en-têtes de colonne apparaissent à l'intérieur de l'extension pour chaque groupe plutôt qu'en haut de ListView.

Répondre

3

Je ne l'ai pas essayé, mais vous pouvez être en mesure d'inclure GridViewHeaderRowPresenters dans vos en-têtes de groupe:

<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}"/> 

Si cela ne fonctionne pas, un moyen infaillible de le faire est d'ajouter une Rectangle qui est peint avec un VisualBrush qui référence le GridViewHeaderRowPresenter unique en haut de GridView.

Cela peut être fait avec une propriété jointe à utiliser sur le rectangle. Lorsque la propriété attachée est définie, elle enregistre un rappel Dispatcher faible priorité:

  1. Scans l'arbre visuel à la ListView
  2. recherches vers le bas jusqu'à ce qu'il trouve le GridViewHeaderRowPresenter
  3. Construire un VisualBrush et définit comme le remplissage du rectangle et

le rectangle lui-même serait quelque chose comme ceci:

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

Ray, merci beaucoup, c'est parfait! Vous ne pouvez pas demander beaucoup plus que cela à partir d'une réponse, j'ai copié le XAML dans mon style de groupe et cela a fonctionné tout de suite. Qualité. Btw, je suis heureux d'utiliser le GridViewHeaderRowPresenter dans mes en-têtes de groupe a fait l'affaire, parce que la deuxième solution que vous avez offert semblait un peu plus impliqué ... – Riko