WPF提供的大小值不正确

时间:2012-09-20 15:49:41

标签: wpf window size width resolution

我有一个WPF应用程序,我试图抓取一个WindowsFormsHost控件的屏幕抓取。为此,我正在做Graphics.CopyFromScreen。在我们测试的大多数盒子上,这个工作都很完美,但是我们有一台机器没有抓住正确的尺寸值。 WPF给出的宽度和高度与控件的实际宽度和高度不匹配。在窥探时,也会显示控件的ActualWidth和ActualHeight的错误值。更进一步,当我窥探主窗口(最大化)时,我得到一个1550的ActualWidth和840的ActualHeight,但我的屏幕分辨率是1920x1080。我会理解为边框,边距等几个像素关闭,但让WPF告诉我,我的最大化窗口宽度比实际屏幕短370像素是没有意义的。任何人都可以解释这种行为吗?

以下是用于捕获控件图像的代码:

public static Bitmap CreateBitmapFromVisual(this FrameworkElement target)
{
    Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
    if (bounds.Width == 0 && bounds.Height == 0)
        return null;

    System.Windows.Point p0 = target.PointToScreen(bounds.TopLeft);
    System.Drawing.Point p1 = new System.Drawing.Point((int) p0.X, (int) p0.Y);
    Bitmap image = new Bitmap((int)bounds.Width, (int)bounds.Height);
    Graphics imgGraphics = Graphics.FromImage(image);
    imgGraphics.CopyFromScreen(p1.X, p1.Y, 0, 0, new System.Drawing.Size((int) bounds.Width, (int) bounds.Height));
    return image;
}

这是一张图片,可以更好地描述我在说什么:

enter image description here

正如你所看到的,snoop说WindowsFormsHost的实际宽度和实际高度是486x336。我记录的任何调试信息都说同样的事情。但是,当我打印屏幕并在油漆中裁剪到控件时,实际尺寸为608x423,差异很大。

作为进一步更新,似乎wpf给出的宽度大约是实际宽度的80%。对于控件和窗口都是如此。

1 个答案:

答案 0 :(得分:4)

您是否查看了显示器的DPI设置?

要执行此操作,请转到“控制面板” - “显示”,然后选择“设置自定义文本大小(DPI)”。在打开的对话框中,您将看到百分比比例。如果未设置为100%,请尝试此操作。这可能是你的问题。