WPF DockPanel不显示垂直滚动条 及ListView滚动需求咨询
嘿,我来帮你搞定这个滚动条的问题!首先得明确一点:DockPanel本身并不自带滚动功能,所以你直接给它加ScrollViewer.VerticalScrollBarVisibility附加属性是不会生效的——得把它放进一个ScrollViewer容器里才行。
针对DockPanel的滚动修复
把你的DockPanel整个包裹在<ScrollViewer>标签内,设置好垂直滚动条的可见性。这样当DockPanel里的内容总高度超过父容器的可用空间时,滚动条就会自动出现。
关于ListView的滚动条
ListView本身内部已经集成了ScrollViewer,你现在设置的ScrollViewer.VerticalScrollBarVisibility="Auto"是没问题的,但要注意一个关键点:ListView的高度必须是受限的。如果ListView的高度设为Auto(默认),它会自动撑大来容纳所有内容,自然不会触发滚动。所以你可以给ListView设置一个固定高度,或者让它继承父容器的可用高度(比如通过DockPanel的布局约束,因为你已经把它Dock到Bottom了,只要父容器有明确高度,它的高度就会被限制)。另外ScrollViewer.CanContentScroll="True"是ListView的默认行为,保持这个设置也没问题,不过如果你的列表项里有高度不确定的控件(比如你用的RichTextBox),有时候把它设为False会让滚动更平滑,这个可以根据实际效果调整。
修改后的完整XAML代码
<ScrollViewer VerticalScrollBarVisibility="Auto"> <DockPanel Margin="10"> <RichTextBox BorderBrush="Transparent" DockPanel.Dock="Top" /> <ListView Margin="10" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" DockPanel.Dock="Bottom"> <ListView.View> <GridView x:Name="DetailsGridView"> <GridViewColumn> <GridViewColumn.CellTemplate> <DataTemplate> <RichTextBox/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn> <GridViewColumn.CellTemplate> <DataTemplate> <RichTextBox/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> </DockPanel> </ScrollViewer>
这样调整后,DockPanel的垂直滚动条和ListView的垂直滚动条都能正常工作啦——当内容超出对应容器的高度时,滚动条就会自动显示出来。
内容的提问来源于stack exchange,提问作者Andrei Petrut

