披露:這是我的第一個WPF應用程序。請接受我的無知。未正確檢索WPF鼠標位置
在我的WPF應用程序,我有一個網格並且在其下方的各種孩子的ControlTemplate。在代碼隱藏中,我使用ControlTemplate動態添加自定義的ContentControl元素。
在創建新的控制,它的目的是捕獲鼠標,並允許拖動功能。如果網格已經加載到窗口上並且我將起始點設置爲MouseButtonEventArgs.GetPosition(window),則拖動計算的代碼很好。但是當網格最初被加載時,事件被觸發時,Point等於窗口的反向位置。例如。如果我的窗口在(350,250),我的起點是(-350,-250)。
private void GridLoaded(object sender, EventArgs e) { // fires MouseLeftButtonDown event for grid}
private void MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
...
m_start = e.GetPosition(this); // 'this' is the current window; returns the inverse coordinates of 'this'
...
}
有沒有更合適的方法來獲得X,我的鼠標位置的y座標。如果有必要,我可以使用屏幕座標,但是我找到的所有代碼都使用PointToScreen(m_start)。這是毫無用處的,因爲m_start不正確。
任何幫助,非常感謝。
WPF和Windows窗體已經有拖放支持,包括dragEnter事件,的dragover,放事件。您應該處理正確的事件,而不是試圖捕獲鼠標位置。檢查[拖放概述】(https://msdn.microsoft.com/en-us/library/vstudio/ms742859(V = VS.100)的.aspx) –
拖放只處理父窗口上運動,正確?我曾試圖實現它,但是應用程序的一個要求是能夠從窗口拖動控件。 (想想瀏覽器上的選項卡) – rosst
否。在DragEnter事件中不會有太多的意義。拖放是一種* Windows *操作,不是視覺效果。它甚至不必以點擊和拖動開始,您的應用程序可以通過DoDragDrop以編程方式指示拖動啓動。例如,Visual Studio中的控件工具箱,當您在控件上單擊*時會啓動拖動。 –