I am new to WPF development, I have a ListView and I want to freeze the header row so that it won’t scroll off the screen when the user scrolls the list. The xaml code, I have inherited, looks something like this:
<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]
The
ListViewalready does this – it has an internalScrollViewerthat only scrolls the items and not the header.The issue is that your outer
ScrollViewertells its child (theDockPanel) that it has infinite space available, and theDockPaneltells this to its children, so yourListViewends up taking up as much space as it needs to display all the items and the internalScrollViewerdoesn’t show up.If you take away your outer
ScrollViewer, theListViewshould pick up that it has limited space, and the internalScrollViewerwill appear.This will obviously affect the rest of the stuff in your
DockPanel, so I’d see what happens and go from there.