13

我不希望我的 WPF GUI 使用 Windows 字体大小选项 (DPI) 进行缩放。这不仅仅是在 UserControl 上指定固定字体大小的问题,因为缩放会影响 UserControl 中的图像和边框。我可以在 UserControl 上设置一个属性来关闭缩放吗?如果没有,我该怎么做?

4

3 回答 3

12

您可以根据当前的 DPI 设置缩小 UserControl。例如,如果您使用以下 DpiDecorator 包装了 UserControl,那么无论 DPI 设置如何,它都应该看起来相同:

public class DpiDecorator : Decorator {

    public DpiDecorator() {
        this.Loaded += (s, e) => {
            Matrix m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice;
            ScaleTransform dpiTransform = new ScaleTransform(1 / m.M11, 1 / m.M22);
            if (dpiTransform.CanFreeze)
                dpiTransform.Freeze();
            this.LayoutTransform = dpiTransform;
        };
    }

}

或者,您可以将该逻辑移至您的 UserControl。

获取 DPI 比例因子的代码来自此博客文章

于 2011-05-03T11:54:46.043 回答
2

Windows 包括一个兼容性帮助程序,用于在高 dpi 设置下失败的有问题的应用程序:

请务必关闭(或关闭)“使用 Windows XP 样式 DPI 缩放”:

在此处输入图像描述

dpiAware并确保您的应用程序在其程序集清单中没有“ ”条目。

Windows 会欺骗你的应用程序,告诉它它是 96dpi,然后显卡会为你放大整个窗口。

一切都会有点模糊,并且通常使用起来不愉快,但在您修复有缺陷的 WinForm 控件之前,它会运行良好。

注意:清单dpiAware条目让您的应用程序告诉 Windows 它想要退出dpi 缩放。只有经过高 dpi 测试的应用程序才会添加此项。

于 2011-06-23T23:02:01.740 回答
1

除了 DpiDecorator,您还需要修复项目的字体大小。例如,在 Windows XP 中,如果您的设置设置为大字体,则菜单项字体大小设置为 14 并且还使用 DPI 设置进行放大,因此如果您不修复菜单项字体大小或任何其他 UI 项字体,您将获得该项目类型的 Window 的默认值。另请记住,用户可以手动更改其他项目的字体大小/字体...

于 2011-06-06T15:46:35.130 回答