Csharp/C#教程:在鼠标位置(鼠标左上角)显示WPF窗口的最佳方法是什么?分享


在鼠标位置(鼠标左上角)显示WPF窗口的最佳方法是什么?

通过inheritanceWindows窗体鼠标点并减去窗口的高度和宽度来设置左侧和顶部(因为我的窗口大小是固定的),我发现这部分时间是有效的:

MyWindowObjectThatInheritsWindow window = new MyWindowObjectThatInheritsWindow(); System.Windows.Point mouseLocation = GetMousePositionWindowsForms(); window.Left = mouseLocation.X - 300; window.Top = mouseLocation.Y - 240; window.Show(); 

编辑:这是获取鼠标位置的代码…

 public System.Windows.Point GetMousePositionWindowsForms() { System.Drawing.Point point = System.Windows.Forms.Control.MousePosition; return new System.Windows.Point(point.X, point.Y); } 

请注意,这可以通过使窗口的右下边缘触摸鼠标光标的左上角来实现。 但是这会打破不同的屏幕分辨率,或者可能是具有不同分辨率的多个显示器? 我还没有完全缩小它,但我只是在另一台PC上尝试了相同的代码,它似乎产生的窗口不是鼠标光标的左上角,而是它的左下角,并且距离很远过去…

我应该添加我的窗口大小到内容,宽度和高度,所以我不能只使用ActualWidth和ActualHeight属性,因为它们不可用。 也许问题在于确保调整正确吗? 有没有办法做到这一点? 我确定300和240是正确的,根据我的主PC和两台显示器运行1920×1080分辨率,因为我已经计算了我明确resize的窗口中所有对象的宽度和高度。 编辑:只是尝试明确地将高度和宽度设置为240/300,以确保窗口不再按内容大小,并且在减去实际高度和宽度时仍然存在此问题!

有任何想法吗?

最后,这就是诀窍:

  protected override void OnContentRendered(EventArgs e) { base.OnContentRendered(e); MoveBottomRightEdgeOfWindowToMousePosition(); } private void MoveBottomRightEdgeOfWindowToMousePosition() { var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice; var mouse = transform.Transform(GetMousePosition()); Left = mouse.X - ActualWidth; Top = mouse.Y - ActualHeight; } public System.Windows.Point GetMousePosition() { System.Drawing.Point point = System.Windows.Forms.Control.MousePosition; return new System.Windows.Point(point.X, point.Y); } 

你不能用这样的东西吗?:

 Point mousePositionInApp = Mouse.GetPosition(Application.Current.MainWindow); Point mousePositionInScreenCoordinates = Application.Current.MainWindow.PointToScreen(mousePositionInApp); 

我无法测试它,但我认为它应该可行。


更新>>>

您不必使用Application.Current.MainWindow作为这些方法中的参数…如果您可以访问处理程序中的Button或其他UIElement ,它仍然可以工作:

 Point mousePositionInApp = Mouse.GetPosition(openButton); Point mousePositionInScreenCoordinates = openButton.PointToScreen(mousePositionInApp); 

再一次,我无法测试这个,但如果失败了,那么你可以在如何在WPF中获取当前鼠标屏幕坐标中找到另外一种方法? post。

您也可以通过稍微修改初始示例并在显示窗口之前定位窗口来执行此操作。

上述就是C#学习教程:在鼠标位置(鼠标左上角)显示WPF窗口的最佳方法是什么?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 MyWindowObjectThatInheritsWindow window = new MyWindowObjectThatInheritsWindow(); var helper = new WindowInteropHelper(window); var hwndSource = HwndSource.FromHwnd(helper.EnsureHandle()); var transformFromDevice = hwndSource.CompositionTarget.TransformFromDevice; System.Windows.Point wpfMouseLocation = transformFromDevice.Transform(GetMousePositionWindowsForms()); window.Left = wpfMouseLocation.X - 300; window.Top = wpfMouseLocation.Y - 240; window.Show(); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1013065.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐