2014-01-17 29 views
0

我有一個Canvas覆蓋PointerMoved事件做一些事情,如果用戶「塗料」。現在我試圖在ScrollViewer的內部移動這個Canvas以添加完美運行的縮放和滾動效果。捕獲指針移動ScrollViewer中的畫布的事件

<ScrollViewer x:Name="MainScrollViewer" Grid.Column="1" 
        VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
        ZoomMode="Enabled" MinZoomFactor="0.5" MaxZoomFactor="2.0" > 
     <Canvas x:Name="MainCanvas" Background="#000000" 
       HorizontalAlignment="Left" VerticalAlignment="Top" 
       PointerMoved="MainCanvas_PointerMoved" /> 
    </ScrollViewer> 

然而,ScrollViewer捕獲所有的指針移動事件,這引起了主漆程序不工作了。

關於如何解決這個問題的任何想法?

+0

嘗試設置VerticalScrollBarVisibility和Horizo​​ntalScrollBarVisibility爲禁用? –

+0

擁有滾動和縮放功能是我首先添加ScrollViewer的原因! :) – MBZ

+0

我的意思是,如果設置禁用,縮放仍然工作,PointerMoved不工作? –

回答

2

在仍然允許縮放/平移的同時進行繪圖 - 目前在XAML中不支持該功能。您需要關閉縮放/平移以便能夠使用指針事件進行繪製,並且無法在自定義操作的同時獲得系統縮放和平移行爲。但是,您可以嘗試通過設置ManipulationMode = All來使用操控事件,並手動使用Scale和Translate值來處理兩個手指的滾動和縮放。

多見於:Touch based drawing app with a Canvas inside a ScrollViewer

我沒有用帆布和滾動型的工作,但我認爲,我發現將幫助你:)

+0

太棒了,謝謝。 – MBZ

0

有一招!您可以添加一個工具按鈕(如手)來切換兩種情況。

  1. 第一個條件啓用繪圖:您可以禁用ScrollViewer的Horizo​​ntalScrollMode和VerticalScrollMode,使您可以使用Canvas的指針事件。
  2. 在第二個你應該爲ScrollViewer啓用Horizo​​ntalScrollMode和VerticalScrollMode,它的工作原理!

以編程方式更改的ScrollViewer屬性:

MainScrollViewer.HorizontalScrollMode = ScrollMode.Auto; 
MainScrollViewer.VerticalScrollMode = ScrollMode.Auto; 
MainScrollViewer.ZoomMode = ZoomMode.Enabled;