2009-03-18 5 views
7

Je suis nouveau dans le développement WPF, j'ai un ListView et je veux figer la ligne d'en-tête pour qu'elle ne défile pas écran lorsque l'utilisateur fait défiler la liste. Le code XAML, j'ai hérité, ressemble à quelque chose comme ceci:WPF: Comment geler une ligne d'en-tête ListView pour qu'elle ne défile pas de l'écran?

<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"> 
    <DockPanel> 
    <forms:BindableGrid DockPanel.Dock="Top" [code snipped] > 
    <ListView.View> 
     <GridView> 
     <GridViewColumn Header="ColA" DisplayMemberBinding="{Binding ColA}" /> 
     <GridViewColumn Header="ColB" DisplayMemberBinding="{Binding ColB}" /> 
      [etc] 

Répondre

11

Le ListView fait déjà - il a un ScrollViewer interne qui fait défiler uniquement les éléments et non pas l'en-tête.

Le problème est que votre ScrollViewer extérieur dit son enfant (le DockPanel) qu'il ya un espace infini disponible et le DockPanel dit cela à ses enfants, de sorte que votre ListView finit par prendre autant de place que nécessaire pour afficher tous les éléments et le ScrollViewer interne n'apparaissent pas.

Si vous enlevez votre ScrollViewer extérieur, le ListView devrait ramasser qu'il a un espace limité, et le ScrollViewer interne apparaîtra.

Cela va évidemment affecter le reste de la substance dans votre DockPanel, donc je verrais ce qui se passe et partir de là.

+0

Fantastique! Ça a arrangé ça, merci. – hamishmcn

+0

Brillant. Juste l'invite dont j'avais besoin pour obtenir l'affichage ListView comme je le voulais. Vous n'avez pas besoin du scrollviewer dans des situations comme celles-ci ... – AndyUK

Questions connexes