2012-09-11 64 views
3

我在嘗試添加功能(如捏合縮放)到一個應用程序時遇到問題,該應用程序在FlipView內部的ScrollView內部具有Image控件。 Image控件和ScrollView控件位於FlipView的ItemTemplate中。爲什麼向圖像添加ManipulationDelta事件處理程序會阻止滾動?

這個想法是,如果用戶在圖像上縮放圖像,它將激活代碼,它將在圖像控件中創建並顯示圖像的放大版本。 (在這種情況下,圖像控件包含一個PDF頁面,所以我們需要更大版本的PDF頁面,而不僅僅是PDF頁面的放大和模糊視圖)。

如果我將ManipulationDelta事件處理程序附加到圖像上,它會捕獲由捏縮放手勢產生的ManipulationDelta事件,然後我可以使用該ManipulationDelta事件來創建PDF縮放效果。但是......現在它不會抓住滾動(拖動)手勢。或者說,這些也會被ManipulationDelta事件處理程序捕獲。我寧願避免必須在此處實現代碼來以編程方式處理滾動。我是否有任何選擇以某種方式將ManipulationDelta事件冒泡(或「over」?)以處理滾動?我會認爲這會發生,事件會冒泡到ScrollView,然後它會處理滾動。但似乎沒有這樣的事情發生。

我將e.Handled設置爲ManipulationDelta事件處理程序中的false。並且IMage控件上的ManipulationMode設置爲「全部」。我嘗試過「縮放」,但這並沒有幫助。

謝謝!

回答

0

WinRT中的ScrollViewer針對性能進行了優化,並在引擎蓋下使用DirectManpulation。這就是爲什麼從ScrollViewer進行滾動並在裏面進行手勢很棘手的原因。

這羅布·卡普蘭(MS僱員)的博客文章提供了更多的信息: http://blogs.msdn.com/b/wsdevsol/archive/2013/02/16/where-did-all-my-gestures-go.aspx

不幸的是沒有很好的解決辦法,如果應用程序需要兩個滾動和手勢(例如,檢測抗滾動CrossSlides )。在這種情況下,在任何地方獲取指針消息的唯一選擇是在任何地方禁用直接操作,但也會禁用滾動操作。爲了獲得迴應,應用程序將需要檢測自身的滾動手勢,然後使用ScrollToHorizo​​ntalOffset或ScrollToVerticalOffset或通過更新SelectedIndex將ScrollViewer導航到新位置。這是非常棘手的,並且比ScrollViewer的功能要慢很多。如果可能的話應該避免。

希望這會有幫助

相關問題