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