2017-11-05 13 views
1

Scrollviewer 안에 캔버스가 있습니다 (InkCanvas가 아닙니다). 두 가지 모두 XAML에서는 작성되지 않지만 코드 숨김에서는 작성됩니다. 펜과 마우스 입력으로 캔버스에 선을 그려야합니다. 모든 것이 잘 작동하지만 펜을 입력 장치로 사용하여 모든 것을 테스트했으며 Scrollviewer가 모든 것을 스크롤하기 시작하기 때문에 터치 입력으로 인식하는 것 같습니다.Scrollviewer 내의 UWP Canvas가 마우스 입력과 같이 펜 입력을 처리합니다.

내 질문은 : Scrollviewer가 장치 유형의 모든 입력을 무시하도록 할 수 있습니까? 그것은 Scrollviewer가 Canvas에서 해고되어야하는 이벤트를 '먹는'것처럼 보이기 때문입니다. 여기

내에서 ScrollViewer 초기화 : 입력 장치가이

같은 터치를 제외한 모든 경우

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; 
    } 

그리고 그 사건의 모든 검사 :

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; 
    } 

사람들은 내 캔버스에서 사용하는 이벤트입니다

if (e.Pointer.PointerDeviceType != Windows.Devices.Input.PointerDeviceType.Touch){...} 

하지만 이러한 이벤트를 사용하면 입력 장치에서 Canvas를 확인할 수만 있습니다. 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

당신을 진심으로 환영합니다. –