在 WPF ListView 中,如何防止自动滚动?

Posted

技术标签:

【中文标题】在 WPF ListView 中,如何防止自动滚动?【英文标题】:In a WPF ListView how can I prevent auto scrolling? 【发布时间】:2010-09-17 14:07:09 【问题描述】:

我有一个 WPF ListView,每次单击仅部分可见的项目时,它都会滚动。如何防止控件将该项目滚动到视图中(而不是简单地选择部分可见的项目)?从该控件进行拖动时,此行为非常烦人。

谢谢。

添加:我正在寻找一种解决方案,以在单击控件认为不完全可见的内容时防止控件本身滚动。这通常是几个像素,不需要滚动。

【问题讨论】:

【参考方案1】:

项目滚动到视图中,因为单击列表项时的默认行为是调用 BringIntoView()。您可以为 RequestBringIntoView 事件添加一个事件处理程序,并在它从 ListViewItems 冒泡到 ScrollViewer 之前捕获它。在您的处理程序中,根据可见区域检查发送方的边界,如果您决定不需要滚动,请将事件的 Handled 标志设置为 true。

【讨论】:

为了澄清,使用 PreviewMouseDown 事件将其吞下。【参考方案2】:

由于我目前正在路上,我无法尝试这个,但您是否尝试过使用 CanContentScroll,和/或将可滚动内容包装到面板中,如 ScrollViewer Overview on MSDN 所建议的那样?

在最坏的情况下,您可能希望将 ListViewItemsPanel 替换为带有“模糊”因素的黑客 ScrollViewer,例如通过捕获RequestBringIntoView 事件。

【讨论】:

【参考方案3】:

你试过this approach吗?

只是作为一个插件,我不知道你对这个主题了解多少,但here is a good place 可以阅读更多相关信息。

添加:

我刚刚发现你也可以prevent the mouse wheel of scrolling。

【讨论】:

以上是关于在 WPF ListView 中,如何防止自动滚动?的主要内容,如果未能解决你的问题,请参考以下文章

请问一下listview如何向gallery那样滚动

listview在上gridview在下,如何能够一起滚动?

WPF:如何在拖动 ListView 项目时允许在 ListView 中使用鼠标滚轮滚动?

如果高度设置为自动,WPF ListView 没有滚动条

C# wpf listview 如何动态添加 高手回答下

wpf下如何去除webbrowser的滚动条