我在应用程序启动时恢复Window的坐标。在Good-old-Windows-Forms中,我使用了System.Windows.Forms.Screen
集合。 WPF世界中有类似的东西吗?
我确实注意到PrimaryScreen*
中的VirtualScreen*
,System.Windows.SystemParameters
个参数。然而,他们让我不知所措,因为在监视器尺寸不同的情况下,似乎无法检测Window是否在内部边界。
答案 0 :(得分:4)
System.Windows.Forms.Screen
在WPF中运行得非常好,所以我认为WPF的设计者在用WPF特定版本替换它时没有任何优势。
当然,您必须进行坐标转换。这是一个简单的转换类:
public class ScreenBoundsConverter
{
private Matrix _transform;
public ScreenBoundsConverter(Visual visual)
{
_transform =
PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice;
}
public Rect ConvertBounds(Rectangle bounds)
{
var result = new Rect(bounds.X, bounds.Y, bounds.Width, bounds.Height);
result.Transform(_transform);
return result;
}
}
使用示例:
var converter = new ScreenBoundsConverter { Visual = this };
foreach(var screen in System.Windows.Forms.Screen.AllScreens)
{
Rect bounds = converter.ConvertBounds(screen.Bounds);
...
}