2012-04-15 24 views
1

是否有可能獲得任何MouseMove事件的通知,即使是標記爲已處理的事件?我有下面的XAML代碼:可以處理WP7.1中的所有MouseMove事件嗎?

<Grid x:Name="ParentContainer"> 
    <ScrollViewer> 
    ... 
    </ScrollViewer> 
</Grid> 

我的目標是讓在ScrollViewer中所有的MouseMove事件,或在ScrollViewer中的東西相當接近它像ParentContainer,沒有訴諸設置ManipulationMode =「控制」最好的表現。

當在ScrollViewer上設置ManipulationMode =「Control」時,在ParentContainer(或ScrollViewer)上處理MouseMove,但在ManipulationMode =「System」時不能處理。這聽起來像是爲了提高Mango的性能,ScrollViewer開始吞噬MouseMove事件以提高性能。不過,我希望能夠得到這些處理的事件如下:

ParentContainer.AddHandler(???.MouseMoveEvent, MyMouseMoveHandler, true); 

在Silverlight或WPF我希望這些代碼路由所有鼠標事件MyMouseMoveHandler,甚至是處理的事件。不幸的是,我找不到MouseMoveEvent的靜態定義傳遞給AddHandler。

有沒有人在WP7中使用AddHandler和MouseMoveEvent?

我最後的手段可能是在背景=「透明」的ScrollViewer的頂部添加一個疊加層,它可以捕獲所有Mouse事件,但不會將它們標記爲已處理,並查看它們是否傳播到ScrollViewer。

回答

4

在Windows Phone OS 7.1中,進行了更改以明確改進ScrollViewer控件的滾動。爲此,他們必須將觸摸手勢的監聽移動到單獨的線程。這意味着控件如何傾聽手勢的架構級別更改。在Windows Phone 7.1中,現在有3個線程負責滾動ScrollViewer:一個用於輸入,一個用於動畫,另一個用於創建新項目。

由於此更改,除非將ManipulationMode設置爲Control,否則將無法從此控件捕獲處理的鼠標事件。正如你在你的問題中指出的那樣,這將禁用爲提高滾動性能所做的更改。

在這種情況下,您不能指望可用於非Windows Phone Silverlight的解決方案能夠正常工作,因爲基於Windows Phone 7.1的電話的底層架構基本上不同。

這裏是微軟關於變化的博客文章:http://blogs.msdn.com/b/slmperf/archive/2011/06/02/listbox-scrollviewer-performance-improvement-for-mango-and-how-it-impacts-your-existing-application.aspx

+0

感謝您的徹底解答布賴恩。你是對的,AddHandler()是一種非Silverlight方法,我希望找到一種解決方法(請參閱下面的答案)。 – 2012-04-18 03:40:20

相關問題