如何解决WPF中 ScrollViewer 内包含 TreeView 或者 ListBox 等控件时滚轮事件被劫持的问题

本文介绍如何在WPF应用程序中使用C#禁用DataGrid的滚动条,并通过定义ScrollViewer的滚动事件来实现对滚动行为的自定义控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 以DataGrid为例,应先设置其横纵向的滚动条不可用
<DataGrid ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
ScrollViewer.VerticalScrollBarVisibility="Disabled" />
  • 定义ScrollViewer的滚动事件
// scrollViewer的滚动事件
private void scrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    var eventArg = new MouseWheelEventArgs(e.MouseDevice, e.Timestamp, e.Delta);
    eventArg.RoutedEvent = UIElement.MouseWheelEvent;
    eventArg.Source = e.Source;

    ScrollViewer scv = (ScrollViewer)sender;
    scv.RaiseEvent(eventArg);
    e.Handled = true;
}
  • 滚动事件跳转
// datagrid的滚动事件
private void DataGrid_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    // 直接跳转至上述scrollViewer的滚动事件
    scrollViewer_PreviewMouseWheel(scrollViewer, e);
}
参考资料:

c# - Mouse scroll not working in a scroll viewer with a wpf datagrid and additional UI elements - Stack Overflow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核小青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值