Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止ScrollViewer吞下MouseweelEvent(更新:DevExpress LayoutControl是原因)_C#_Wpf_Xaml_Devexpress - Fatal编程技术网

C# 防止ScrollViewer吞下MouseweelEvent(更新:DevExpress LayoutControl是原因)

C# 防止ScrollViewer吞下MouseweelEvent(更新:DevExpress LayoutControl是原因),c#,wpf,xaml,devexpress,C#,Wpf,Xaml,Devexpress,我有一个UserControl,它包含一个ScrollViewer,其中包含一个画布。 我有自定义的缩放逻辑,但如果ScrollViewer可以滚动,它会完全吞下鼠标滚轮事件。当到达底部时,缩放工作没有问题 private void CanvasOverlayControl_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { if(Keyboard.IsKeyDown(Key.LeftCtrl) || Key

我有一个UserControl,它包含一个ScrollViewer,其中包含一个画布。 我有自定义的缩放逻辑,但如果ScrollViewer可以滚动,它会完全吞下鼠标滚轮事件。当到达底部时,缩放工作没有问题

    private void CanvasOverlayControl_PreviewMouseWheel(object sender, MouseWheelEventArgs e) {
        if(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) {
            if(e.Delta > 0) {
                // Wheel up
                Zoom *= 1.15f;
            } else if(e.Delta < 0) {
                // Wheel down
                Zoom *= 0.85f;
            }
        }
    }
我怎样才能制止这种行为

编辑:

我发现DevExpress LayoutControl导致了这种情况,因为它处理内容的滚动。有没有办法禁用此功能


提前感谢

让我们从基础开始。。。确保画布实际上正在获取任何鼠标事件。它需要一些背景来允许命中测试

<Canvas Background="Transparent"
代码隐藏

        PreviewMouseWheel += CanvasOverlayControl_PreviewMouseWheel;
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Canvas_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        e.Handled = true;
    }
}

观察结果:当鼠标在画布的绿色区域上时,鼠标滚轮上没有滚动。当鼠标在画布外时,scrollviewer会滚动。

我尝试过这个方法,但只有当scrollviewer不能再滚动时才会调用我的方法。@horotab用我的示例代码编辑。请尝试验证是否对同一代码得到相同的结果。如果你能复制我的样本,你需要找出,在你的实际项目中有什么不同。如果你不能复制,那么我们的系统在某种程度上是非常不同的,我可能帮不了你。@horotab你检查过这个例子吗?问题还没有解决吗?是的,我发现问题在于我有一个Devexpress.LayoutControl在外面处理滚动。你知道如何防止它这样做吗?我不想用网格构建UI:(@horotab抱歉,我不熟悉DevExpress。如果您仍然希望得到答案,您必须用新信息更新您的问题。
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Canvas_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
    {
        e.Handled = true;
    }
}