我有一个带有几个列表框的滚动查看器。问题是,当用户的鼠标在列表视图上时,如果用户使用鼠标中间的滚轮来滚动滚动查看器。listview将其内部的滚动查看器滚动到底部,然后继续捕获鼠标,从而阻止包含的滚动查看器滚动。
你有什么办法处理这件事吗?
发布于 2012-07-12 20:24:28
这是因为ListView(实际上是ListBox的)内容模板本身用ScrollViewer包装了它的项目。
最简单的方法是通过删除您自己的内部ListView的Template来禁用它,该ListView不会创建ScrollViewer
<ListView>
<ListView.Template>
<ControlTemplate>
<ItemsPresenter></ItemsPresenter>
</ControlTemplate>
</ListView.Template>
...
</ListView>顺便说一下,如果你在ListView中有一个ListView,也会发生同样的事情(这就是我的例子)。
发布于 2020-02-13 22:02:30
IMO,处理这种情况的最好方法是创建自定义控件:
class MyScrollViewer : ScrollViewer
{
protected override void OnPreviewMouseWheel(MouseWheelEventArgs e)
{
base.OnPreviewMouseWheel(e);
if (!e.Handled)
{
e.Handled = true;
this.RaiseEvent(new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta)
{
RoutedEvent = UIElement.MouseWheelEvent,
Source = this
});
}
}
}发布于 2012-01-20 04:33:16
您是否尝试禁用ListView's ScrollBars
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Disabled" />https://stackoverflow.com/questions/8932720
复制相似问题