1
A
回答
1
我們可以使用指針事件檢測多個手指輸入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>
正如你所看到的,我把ScrollViewer
出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();
}
}
當用一根手指畫,在我的演示中,只有當指針被釋放時,畫布纔會更新其佈局。您可以更改代碼,以在每次移動指針時更新畫布。但我認爲對於這一點,您需要用另一個Win2D控件替換canvas:CanvasControl
,欲瞭解更多信息,可以參考CanvasControl.Invalidate Method。
+0
非常感謝您的幫助。這個對我有用。 :) –
相關問題
- 1. 如何獲得觸摸的觸摸位置開始功能
- 2. Android(AndEngine):如何在onSceneTouchEvent方法之外獲得觸摸輸入事件?
- 3. 如何獲得與煎茶觸摸
- 4. 如何獲得觸摸大小
- 5. 如何限制觸摸輸入?
- 6. 如何處理多個觸摸輸入
- 7. 在SurfaceView中觸摸輸入「按鈕」
- 8. 如何在觸摸特定位置時獲得觸覺反饋?
- 9. WindowStyle無和觸摸輸入
- 10. Unity3d - 觸摸輸入問題
- 11. Android觸摸輸入問題
- 12. Android觸摸輸入NullReferenceException
- 13. Android觸摸輸入:座標?
- 14. 如何從Vita的後觸摸板獲取輸入數據?
- 15. 如何使用OpenGL(Gles2WatchFaceService)獲取Android Wear上的觸摸輸入?
- 16. 如何在iphone中點擊按鈕後獲得觸摸事件?
- 17. 如何在scrollViewDidScroll方法中獲得觸摸位置?
- 18. 在Android中如何獲得手指觸摸屏幕的多少?
- 19. 如何在android中獲得雙觸摸位置?
- 20. 如何轉換觸摸輸入到鼠標輸入C#統一?
- 21. 如何在C#中進行觸摸輸入?
- 22. 如何在Haskell中輸入時如何獲得輸入?
- 23. 如何在輸入獲得焦點時觸發動作?
- 24. 如何在單擊/觸摸屏幕時暫停MediaElement - UWP
- 25. 無法獲得觸摸事件委託方法觸摸uiimageview
- 26. 在UIWebView中捕獲觸摸
- 27. 如何獲得Sencha觸摸選項字段中的選定值
- 28. 如何獲得iOS中的觸摸大小?
- 29. 如何獲得觸摸時,父視圖已經userInteractionEnabled iOS中
- 30. 我如何在WebView上獲得觸摸事件
你檢查了我的答案嗎?任何問題? –