我試圖圍繞ScrollViewer的內容進行平移,方法與在PDF文檔中平移相同(滾動以放大/縮小,單擊並拖動以平移)ScrollViewer爲觸摸事件(PanningMode)內置了此功能,但是這似乎並未轉化爲Click + Drag事件。有沒有辦法告訴它/模擬這個功能?使用鼠標事件增益ScrollViewer的PanningMode行爲
回答
搖攝,通過實施的ScrollViewer四個虛擬方法內部啓用:
OnManipulationCompleted在 OnManipulationDelta在 OnManipulationInertiaStarting在 和OnManipulationStarting
都到哪兒去定義這些虛擬方法。讓我們走上層次結構。我們看到它在OnManipulationCompletedThunk中的UIElement上被調用(我確信其餘的方法也是相同的)。
在這一點上,一切仍然是私人的,我們希望挖掘一些東西。不幸的是,這是反射器和ILSpy失敗的原因(事實上它沒有,調用網站是在一個不同的DLL(PresentationCore),我沒有加載brb)。回來吧。一旦我們查看PresentationCore,我們有一個模糊的想法,即dependencyProperties是靜態註冊的,所以我們找到了.cctor。這裏有一些興趣點。
ManipulationCompletedEvent = Manipulation.ManipulationCompletedEvent.AddOwner(typeof(UIElement));
和
EventManager.RegisterClassHandler(typeof運算(的UIElement),ManipulationCompletedEvent,新事件處理程序(UIElement.OnManipulationCompletedThunk));
我們看到OnManipulationCompletedThunk是這個監聽ManipulationCompletedEvent的類處理程序的註冊回調。此外,ManipulationCompletedEvent最初並不是在UIElement上定義的,它是通過AddOwner從操縱靜態類中借用的。
做一個Manipulation類的搜索,我發現它在同一個程序集中的System.Windows.Input命名空間中。是公開的,是的。涼!所以此時我知道如果我觸發ManipulationCompletedEvent或它的任何好友,它最終會調用ScrollViewer。 http://msdn.microsoft.com/en-us/library/system.windows.input.manipulation.aspx
在這個公共靜態類的文檔中,我看到有一些有趣的和可能有用的方法。唯一不容易理解的是AddManipulator。這件事做什麼? Clicks .. reads .. oh,「每個接觸點都是一個IManipulator對象,例如,如果使用兩個手指來調整對象的大小,則會爲每個手指創建一個實現IManipulator的TouchDevice。」所以TouchDevice是一個IManipulator。也許這會給我一些關於如何創建我自己的操縱者的想法。
TouchDevice上的屬性給出了它支持的功能的一些線索。它有點像MouseDevice(具有捕獲的概念,DirectlyOver等),但它不支持以相同的方式進行操作。相反,我們希望對Mouse事件做出響應操作。讓我們看看TouchDevice是如何真正實現這些功能的。
方法TouchDevice正在執行是爲getPosition和ManipultionEnded
爲getPosition返回this.GetTouchPoint(對於relativeTo)。位置; 對於relativeTo是一個參數
ManipulationEnded電話OnManipulationEnded轉發名爲cancel一個布爾參數。不知道什麼取消了。哦,原來它沒有用,很奇怪,但確定。這基本上將捕獲設置爲空。在這裏的兔子洞結束Kindof所以我們必須備份和重新評估。
我真正想要做的是手工提高對UIElement的事件,看看它是否工作。 UIElement上的RaiseEvent方法應該適用於此。去試試brb。 Err等我錯過了一些東西,所有在Manipulation類上定義的事件都被標記爲內部。
顯然,這些事件僅僅意味着國內消費,以及短做反思我們沒有一個渠道存在。我想,也許使用操作特徵
是矯枉過正你想要做什麼。只需拖動事件和畫布就可以實現這一點。
此外,發現這個雖然谷歌搜索,並認爲它可能有一定的相關性http://multitouchvista.codeplex.com/
- 1. (UWP)ScrollViewer PanningMode - 它存在嗎?
- 2. 增加對鼠標事件
- 3. WPF的ScrollViewer /帆布鼠標事件處理
- 4. 畫布鼠標事件奇怪行爲
- 5. 鼠標事件
- 6. 鼠標事件的怪事
- 7. Weka使用增益比和信息增益(ID3&C4.5(J48))
- 8. 繪圖使用鼠標事件
- 9. 使用jQuery鼠標取消事件
- 10. 使用cvSetMouseCallback處理鼠標事件
- 11. PyHook鼠標事件
- 12. JAVA鼠標事件
- 13. jquery鼠標事件
- 14. 鼠標事件BHO
- 15. NSWindow鼠標事件
- 16. prism4:鼠標事件
- 17. silverlight鼠標事件
- 18. 如何防止ScrollViewer使用MouseWheel事件
- 19. SVG組鼠標懸停/鼠標事件
- 20. 如何將鼠標移動事件轉換爲鼠標滾動/拖動事件
- 21. clearTimeout鼠標懸停事件不清除setoutout鼠標事件
- 22. C中的鼠標事件#
- 23. 鼠標事件的NSRect
- 24. JPanel上的鼠標事件
- 25. JavaScript中的鼠標事件?
- 26. 與Qt的鼠標事件
- 27. Treeview上的鼠標事件
- 28. picturebox上的鼠標事件?
- 29. java右鍵雙擊鼠標事件行爲與Mac OS X上的左雙擊鼠標事件相同
- 30. 鼠標懸停事件無法運行