2017-11-05 4 views
1

私はScrollviewer内にCanvas(InkCanvasではありません)を持っています。どちらもXAMLではなくコードビハインドで作成されます。ペンとマウスの入力でキャンバスに線を描きたいのですが、すべてうまくいきますが、ペンで入力デバイスをテストし、Scrollviewerがタッチ入力として認識しているようです。Scrollviewer内のUWPキャンバスは、マウス入力のようにペン入力を処理します。

私の質問です:Scrollviewerに、デバイスタイプからのすべての入力を無視するように指示できますか? Scrollviewerがキャンバスから発射すべきイベントを「食べている」ようにも思えるからです。

ここに私のScrollViewerのinitを:

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へのイベントはCanvas afaikに渡されません。

答えて

1

PointerPressedイベントをScrollViewerにバインドして、e.Pointer.PointerDeviceTypePointerDeviceType.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; 
    } 
} 
+0

これは魅力的です。どうもありがとう。 – eXodiquas

+0

ようこそ。 –

関連する問題