Ale*_*dru 5 c# wpf mouse location window
我发现这部分时间通过继承Windows窗体鼠标点并减去窗口的高度和宽度来设置左侧和顶部(因为我的窗口大小是固定的):
MyWindowObjectThatInheritsWindow window = new MyWindowObjectThatInheritsWindow();
System.Windows.Point mouseLocation = GetMousePositionWindowsForms();
window.Left = mouseLocation.X - 300;
window.Top = mouseLocation.Y - 240;
window.Show();
Run Code Online (Sandbox Code Playgroud)
编辑:这是获取鼠标位置的代码...
public System.Windows.Point GetMousePositionWindowsForms()
{
System.Drawing.Point point = System.Windows.Forms.Control.MousePosition;
return new System.Windows.Point(point.X, point.Y);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这可以通过使窗口的右下边缘触摸鼠标光标的左上角来实现.但是这会打破不同的屏幕分辨率,或者可能有多个具有不同分辨率的显示器?我还没有完全缩小它,但我只是尝试在另一台PC上使用相同的代码,它似乎产生的窗口不是鼠标光标的左上角,而是它的左下角,并且距离很远过去...
我应该添加我的窗口大小到内容,宽度和高度,所以我不能只使用ActualWidth和ActualHeight属性,因为它们不可用.也许问题在于确保调整正确吗?有没有办法做到这一点?我确定300和240是正确的,根据我的主PC和两个运行1920x1080分辨率的显示器,因为我已经计算了我明确调整大小的窗口中所有对象的宽度和高度.编辑:只是尝试明确地将高度和宽度设置为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);
}
Run Code Online (Sandbox Code Playgroud)