我有一个Windows窗体窗口应用程序。在应用程序内部,我们想要打开一个位于相对于鼠标位置的位置的WPF窗口。假设窗口中心可以显示在鼠标坐标或其他情况下,窗口的左上角可以设置为鼠标坐标。
我看过像http://www.formatexception.com/2008/09/wpf-and-mouseposition/这样的帖子 但这对我没有帮助,因为我没有在窗口前打开WPF控件。我只有窗体,所以下面的行不适用于我的情况
Point mousePoint = Mouse.GetPosition(this);
答案 0 :(得分:1)
由于您有可用的winforms控件,因此可以使用Control.MousePosition
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseposition.aspx
您是否从winforms表单显示wpf窗口?我写了一个带有按钮的表单的快速测试。单击按钮时,它会在光标位置打开一个wpf窗口。这工作正常,我没有在按钮单击之前创建或显示任何WPF控件。
我尝试使用和不设置WindowStartupLocation
并且它们都有效,但是您可能需要尝试添加它。这是一个例子:
private void button1_Click(object sender, EventArgs e)
{
Window w = new Window();
w.WindowStartupLocation = WindowStartupLocation.Manual;
w.Left = Control.MousePosition.X;
w.Top = Control.MousePosition.Y;
w.Show();
}
但是,如果上面的代码示例对您不起作用,那么您可能会进一步描述您的场景并包含一些代码示例吗?
答案 1 :(得分:0)
根据Bill Tarbell的回答,您可能需要考虑DPI缩放:
private Point GetScalingFactor(Window window)
{
var zeroPoint = window.PointToScreen(new Point(0, 0));
var hundredPoint = window.PointToScreen(new Point(100, 100));
return new Point(
100.0 / (hundredPoint.X - zeroPoint.X),
100.0 / (hundredPoint.Y - zeroPoint.Y));
}
private void ShowAtCursor(Window parent, Window toShow)
{
var point = parent.PointToScreen(System.Windows.Input.Mouse.GetPosition(parent));
var scaling = GetScalingFactor(parent);
toShow.Left = point.X * scaling.X;
toShow.Top = point.Y * scaling.Y;
toShow.WindowStartupLocation = WindowStartupLocation.Manual;
toShow.Show();
}