C# 如何在uwp中获得触摸输入?
我需要,如果用户用一个手指触摸画布控件,绘图过程必须开始,如果用户用两个手指触摸画布控件,画布区域必须滚动/平移。我该怎么做C# 如何在uwp中获得触摸输入?,c#,wpf,windows-phone,uwp,C#,Wpf,Windows Phone,Uwp,我需要,如果用户用一个手指触摸画布控件,绘图过程必须开始,如果用户用两个手指触摸画布控件,画布区域必须滚动/平移。我该怎么做 感谢我们可以使用指针事件来检测UWP中的多个手指输入。例如: <ScrollViewer x:Name="scrollViewer" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden" VerticalScrollMode="Disable
感谢我们可以使用指针事件来检测UWP中的多个手指输入。例如:
<ScrollViewer x:Name="scrollViewer" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden"
VerticalScrollMode="Disabled" HorizontalScrollMode="Disabled">
<canvas:CanvasControl x:Name="canvasControl" Draw="CanvasControl_Draw" CreateResources="canvasControl_CreateResources" ClearColor="CornflowerBlue"
PointerPressed="canvasControl_PointerPressed" PointerReleased="canvasControl_PointerReleased" PointerExited="canvasControl_PointerReleased"
PointerCanceled="canvasControl_PointerPressed"
PointerMoved="canvasControl_PointerMoved" Width="1200">
</canvas:CanvasControl>
</ScrollViewer>
当用一个手指绘制时,在我的演示中,画布将仅在释放指针时更新其布局。您可以更改代码,使画布在每次移动指针时更新。但我认为,为此,您需要用另一个Win2D控件替换
canvas:CanvasControl
,有关更多信息,您可以参考。是否检查了我的答案?有什么问题吗?非常感谢你的帮助。它对我有用。:)
private CanvasRenderTarget renderTarget;
private async void CanvasControl_Draw(Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
{
args.DrawingSession.DrawImage(renderTarget);
}
private void canvasControl_CreateResources(CanvasControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args)
{
renderTarget = new CanvasRenderTarget(sender, (float)sender.ActualWidth, (float)sender.ActualHeight);
}
private List<PointerPoint> m_pt = new List<PointerPoint>();
private void canvasControl_PointerPressed(object sender, PointerRoutedEventArgs e)
{
PointerPoint cp = e.GetCurrentPoint(canvasControl);
m_pt.Add(cp);
if (m_pt.Count == 2)
{
scrollViewer.HorizontalScrollMode = ScrollMode.Enabled;
scrollViewer.VerticalScrollMode = ScrollMode.Enabled;
}
}
private void canvasControl_PointerReleased(object sender, PointerRoutedEventArgs e)
{
if (m_pt.Count == 1)
canvasControl.Invalidate();
scrollViewer.HorizontalScrollMode = ScrollMode.Disabled;
scrollViewer.VerticalScrollMode = ScrollMode.Disabled;
m_pt.Clear();
}
private void canvasControl_PointerMoved(object sender, PointerRoutedEventArgs e)
{
if (m_pt.Count == 1)
{
var pt = e.GetCurrentPoint(canvasControl);
using (var ds = renderTarget.CreateDrawingSession())
{
ds.DrawCircle(new Vector2((float)pt.Position.X, (float)pt.Position.Y), 2, Colors.Black);
}
}
else
{
if (m_pt.Count > 2)
m_pt.Clear();
}
}