披露:这是我的第一个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中的控件工具箱,当您在控件上单击*时会启动拖动。 –