4

WPF 应用程序是否通常在开箱即用的高 DPI 屏幕上正确缩放(无需进一步自定义清单等?)。我的理解是他们做的?

在笔记本电脑屏幕上查看时,我编写的两个 WPF 应用程序在我的新笔记本电脑(运行 Windows 10)上都显得模糊。通常笔记本电脑的主显示器设置为外部低 dpi 显示器,内置笔记本电脑面板的缩放比例为 125%。但是,无论是否插入低 dpi 显示器,都会出现模糊。

我认为这可能与我的两个应用程序的启动方式有关(通过主方法,而不是启动主窗口的默认代码模板),但我刚刚启动了 Visual Studio 2015 并生成了一个全新的 WPF带有项目模板的应用程序(空白表单上只有几个单选按钮),它也不能在我的系统上扩展到高 DPI。

值得一提的是,我已经在我的 Windows 副本上配置了“首选外部清单”注册表设置,以允许每个应用程序通过清单禁用高 dpi 缩放。(即HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide "PreferExternalManifest"=dword:00000001)。

4

3 回答 3

5

.net 4.6.2开始, WPF 应用程序默认每个 Monitor DPI 感知,而不是在早期版本中:

WPF 应用程序现在启用了每个监视器的 DPI 感知。这种改进对于将不同 DPI 级别的多个显示器连接到一台机器的情况至关重要。由于 WPF 应用程序的全部或部分在监视器之间转换,因此 WPF 的预期行为是自动将应用程序的 DPI 匹配到屏幕。现在可以了。在以前的版本中,您必须编写额外的本机代码才能在 WPF 应用程序中启用每个监视器的 DPI 感知。

因此,安装 .4.6.2 开发工具并将您的应用程序定位到 4.6.2 以获得对此的支持。

于 2016-08-30T04:18:53.947 回答
3

任何依赖于 PresentationCore 的程序都会自动识别 DPI。它需要一个属性来显式禁用它

您肯定遇到了不同的问题,WPF 应用程序不会自动支持每个显示器的 dpi 感知。自 Windows 8.1 起提供的一项功能。将主显示器放在外接显示器上很可能会发生这种情况,您可能给它一个不同的 DPI 设置,现在笔记本电脑屏幕上的窗口被迫使用相同的 DPI 设置,除非他们明确选择加入。 需要大量的坚韧不拔的工作。或者考虑简单地将笔记本电脑的屏幕作为主显示屏,使用 Display 小程序来回切换很容易。

于 2016-08-30T01:36:14.843 回答
1

假设您正在运行足够高的版本(根据另一个答案为 4.6.2),则执行以下操作。我在 Window.Current.Activate() 之后不久运行它:

  double GetDpi()
    {
        var qualifiers = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues;
        double scale = 96;
        if (qualifiers.ContainsKey("Scale"))
        {
            string strScale = qualifiers["Scale"];
            double.TryParse(strScale, out scale);
        }
        return scale;
    }
于 2016-11-23T13:31:57.623 回答