Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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内部的UWP画布处理笔输入,就像鼠标输入一样_C#_.net_Canvas_Uwp_Scrollviewer - Fatal编程技术网

C# Scrollviewer内部的UWP画布处理笔输入,就像鼠标输入一样

C# Scrollviewer内部的UWP画布处理笔输入,就像鼠标输入一样,c#,.net,canvas,uwp,scrollviewer,C#,.net,Canvas,Uwp,Scrollviewer,我在Scrollviewer中有一个画布(不是InkCanvas)。两者都不是在XAML中创建的,而是在代码隐藏中创建的。我想用笔和鼠标输入在画布上画线,一切正常,但现在我用笔作为输入设备测试了整个过程,Scrollviewer似乎将其识别为触摸输入,因为整个过程开始滚动 我的问题是:是否可以告诉Scrollviewer忽略来自设备类型的所有输入?因为Scrollviewer似乎正在“吃掉”应该从画布中触发的事件 这里是我的Scrollviewer初始化: private void SetUpS

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

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

这里是我的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;
    }
这些是我在画布中使用的事件:

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){...}

但是对于这些事件,我只能检查画布的输入设备,如果我将事件添加到Scrollviewer,它将不会立即传递到画布。

您可以将
PointerPressed
事件绑定到Scrollviewer,并检查
e.Pointer.PointerDeviceType
是否等于
PointerDeviceType.Pen
。然后您可以禁用
垂直滚动模式
水平滚动模式和
缩放模式
,如下面的代码所示

如果要重新激活ScrollViewer,可以将
PointerExit
事件绑定到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;
    }
}