WPF 给出不正确的大小值

标签 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 表示 WindowsForms 主机的实际宽度和实际高度为 486x336。我记录的任何调试信息都说同样的话。然而,当我打印屏幕并裁剪到绘图中的控件时,实际尺寸是 608x423,这是一个相当大的差异。

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

最佳答案

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

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

关于WPF 给出不正确的大小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12516292/

相关文章:

c# - 我以前从未见过的新 MEF 错误 -- "The export is not assignable to type..."

javascript - 为什么 jquery 源代码不直接将其传递给其 IIFE 的第一个参数?

css - em 的高度是多少?

c++ - 有没有一种简单的方法来判断一个类/结构是否没有数据成员?

c# - 从 Windows 窗体到 WPF

c# - MVVM 中的子窗口

session - 是否可以让 gVim 记住窗口大小?

vim - 从命令行设置 Vim 窗口大小和选择

text - 如何确定 OpenSCAD 中文本的宽度?

c# - 使用动态类型