c# - 部分垂直滚动

标签 c# xaml listbox

我有一个包含两列的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/

相关文章:

c# - 在 C# 中使用带有字符串数组的 'foreach' 循环

c# - 应用程序关闭,恕不另行通知

WPF 中的 C# 和 XAML – 它们如何协同工作?

c# - 如何设置 UWP 元素的状态?

wpf - ListBox 与 ListView - 如何选择数据绑定(bind)

c# - 在运行时获取非泛型 IDictionary 的键和值类型

C# 错误 : Cannot implicitly convert type 'int' to 'short' for item value

c# - XAML 2 组合框颜色样式与资源字典?

c# - 将数据从 Listbox1 复制到 Listbox2

python - 如何将 urwid.BigText 放入 urwid.ListBox