我有一个包含两列的ListBox
- 第一列包含一个切换按钮,第二列包含一个Expander
,其中包含多个控件。如果 expander
折叠起来,ListBox
的整体滚动效果很好。但是,如果 Expander
打开并且扩展器包含大量项目,ListBox
将滚动整个行大小,通常不会显示部分 expander
列表。
这类似于将大于列表框可视区域的图像放置在列表框中。在这种情况下,如果您单击滚动条,您可能希望“逐步”向下移动图像,而不是一键将其滚动到屏幕之外。
ListBox
是否有一个设置可以允许部分滚动,正如我所描述的那样?我的 listBox
是在 xaml
中定义的,控件是通过 C# 代码添加的。
最佳答案
您是否尝试过通过将 ScrollViewer.CanContentScroll
设置为 false 来打开平滑滚动?这是控制 ScrollViewer
是否一次滚动一个项目,或者在部分可用项目的情况下平滑滚动的因素。
"ScrollViewer currently allows two scrolling modes: smooth pixel-by-pixel scrolling (CanContentScroll = false) or discrete item-by-item scrolling (CanContentScroll = true). Currently WPF supports UI virtualization only when scrolling by item. Pixel-based scrolling is also called 'physical scrolling' and item-based scrolling is also called 'logical scrolling'." (From this answer).
如果 ListBox
中有很多项目,这可能不是理想的解决方案,因为它会关闭虚拟化,因此可能会对性能产生影响。看看this answer查看有关平滑滚动和虚拟化的更多信息。 (一个答案建议采用一种允许平滑滚动和虚拟化的技巧)。
关于c# - 部分垂直滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15162421/