【问题标题】:UWP Canvas inside Scrollviewer handle pen input like mouse inputScrollviewer 中的 UWP Canvas 像鼠标输入一样处理笔输入
【发布时间】:2017-11-05 16:30:39
【问题描述】:

我在 Scrollviewer 中有一个 Canvas(不是 InkCanvas)。两者都不是在 XAML 中创建的,而是在后面的代码中创建的。我想用笔和鼠标输入在我的画布上画线,一切正常,但现在我用笔作为输入设备测试了整个东西,并且 Scrollviewer 似乎将它识别为触摸输入,因为整个东西开始滚动。

我的问题是:是否可以告诉 Scrollviewer 忽略来自设备类型的所有输入?因为 Scrollviewer 似乎也在“吃掉”应该从 Canvas 触发的事件。

这里是我的 Scrollviewer 初始化:

private void SetUpScrollViewer()
    {
        scroll = new ScrollViewer();

        scroll.VerticalScrollMode = ScrollMode.Auto;
        scroll.HorizontalScrollMode = ScrollMode.Auto;
        scroll.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
        scroll.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
        scroll.ZoomMode = ZoomMode.Enabled;
        scroll.ManipulationMode = ManipulationModes.System;
        scroll.HorizontalAlignment = HorizontalAlignment.Left;
        scroll.VerticalAlignment = VerticalAlignment.Top;
        scroll.IsZoomInertiaEnabled = false;

        scroll.MinZoomFactor = 1;
        scroll.MaxZoomFactor = 5;
    }

这些是我在 Canvas 中使用的事件:

public void EnableDrawingOnCanvas(Canvas canvas)
    {
        //Adding the needed event handler.
        canvas.PointerPressed += Canvas_PointerPressed;
        canvas.PointerMoved += Canvas_PointerMoved;
        canvas.PointerReleased += Canvas_PointerReleased;
        canvas.PointerExited += Canvas_PointerExited;
    }

并且这些事件都检查输入设备是否是除了触摸之外的一切

if (e.Pointer.PointerDeviceType != Windows.Devices.Input.PointerDeviceType.Touch){...}

但是对于这些事件,我只能检查我的 Canvas 的输入设备,如果我向 Scrollviewer 添加一个事件,它不会被传递给 Canvas afaik。

【问题讨论】:

    标签: c# .net canvas uwp scrollviewer


    【解决方案1】:

    您可以将PointerPressed 事件绑定到您的ScrollViewer 并检查e.Pointer.PointerDeviceType 是否等于PointerDeviceType.Pen。然后您可以禁用VerticalScrollModeHorizontalScrollModeZoomMode,如下面的代码所示。

    如果您想重新激活 ScrollViewer,您可以将 PointerExited 事件绑定到您的 ScrollViewer 并重新启用所有内容。

    private void Scroll_PointerPressed(object sender, PointerRoutedEventArgs e)
    {
        if (e.Pointer.PointerDeviceType == PointerDeviceType.Pen)
        {
            scroll.VerticalScrollMode = ScrollMode.Disabled;
            scroll.HorizontalScrollMode = ScrollMode.Disabled;
            scroll.ZoomMode = ZoomMode.Disabled;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 2012-03-13
      • 2010-09-20
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      相关资源
      最近更新 更多