WindowActualTop、ActualLeftWPF中获取窗口位置的正确方法是什么?这是我的一些尝试。首先尝试,明显的PointGetPosition(Windowwin){returnnewPoint(win.Top,win.Left);但这会在窗口最大化时返回“错误”的位置。第二次尝试:PointGetPosition(Windowwin){if(win.WindowState==WindowState.Maximized)returnnewPoint(0,0);否则返回新点(win.Top,win.Left);}差不多了,但是还有一个问题:当你有两个(或更多)屏幕并且窗口在第二个屏幕最大化时,你得到的(0,0)位置并不能反映窗口的实际位置。我注意到Window有_actualTop和_actualLeft私有成员,但没有公共属性来公开它们。您如何检索正确的值?是的,尴尬。你有更大的问题,如果用户将任务栏放在左侧或顶部,即使在主显示器上,(0,0)也没有效果。像我这样的。您可以从Windows窗体屏幕类获得帮助。使用其FromPoint()方法,然后使用WorkingArea属性。Bounds属性(如果允许窗口全屏显示)。就个人而言,我只是P/InvokeGetWindowRect()。如果你不想依赖Winforms或PI,你可以使用反射,System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance);返回(双)leftField.GetValue(窗口);}否则返回window.Left;这是GetWindowRect的基于P/Invoke的解决方案,但使用扩展方法使您的代码看起来更好。您在代码中使用myWindow.ActualTop()和myWindow.ActualLeft()。以上就是C#学习教程分享的全部内容:WindowActualTop,ActualLeft。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注—staticclassWindowExtensions{[StructLayout(LayoutKind.Sequential)]structRECT{publicintLeft;公共诠释顶部;publicint对;公共诠释底部;}[DllImport("user32.dll")][返回:MarshalAs(UnmanagedType.Bool)]staticexternboolGetWindowRect(IntPtrhWnd,outRECTlpRect);publicstaticdoubleActualTop(thisWindowwindow){switch(window.WindowState){caseWindowState.Normal:returnwindow.Top;caseWindowState.Minimized:returnwindow.RestoreBounds.Top;caseWindowState.Maximized:{RECTrect;GetWindowRect((newWindowInteropHelper(window)).Handle,outrect);返回rect.Top;}}返回0;}publicstaticdoubleActualLeft(thisWindowwindow){switch(window.WindowState){caseWindowState.Normal:returnwindow.Left;caseWindowState.Minimized:returnwindow.RestoreBounds.Left;caseWindowState.Maximized:{RECTrect;GetWindowRect((新窗口wInteropHelper(window)).Handle,outrect);返回rect.Left;}}返回0;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
