【发布时间】:2014-01-04 20:46:05
【问题描述】:
我有一个 C# .Net 4.0 Windows Forms 应用程序在 Win7 和 Win8.1 上的超高分辨率显示器上无法正确缩放字体。
在超高分辨率平板电脑显示器(13.3" 高分辨率 QHD+ (3200 x 1800) 显示器)上运行并在 Windows 控制面板 > 显示器中将比例因子设置为 200% 时,DPI 虚拟化缩放会中断。
该应用一开始加载良好,一切看起来都很棒。然后,当我单击创建 System.Windows.Media.MediaPlayer 对象的按钮时,DPI 虚拟化缩放突然中断。
测试表明正是这种方法可以做到这一点。 System.Windows.Media.MediaPlayer mpPlayer = new MediaPlayer();
测试显示 MediaElement 类存在同样的问题。
是的,即使是具有 DPI-Aware 元素的应用清单也能达到这一点。
所以我的问题是... 有解决方法或解决方法吗? MediaPlayer 与 DPI 虚拟化和 DPI-Awareness 有什么关系?它没有任何可视化方法或属性。
更新:我的最终解决方案
经过大量研究,我发布了解决方案以帮助他人避免痛苦。
将此程序集属性添加到 AssemblyInfo.cs
[程序集:System.Windows.Media.DisableDpiAwareness]
此属性在应用程序集中禁用 DPI 感知,并允许 DPI 虚拟化扩展应用程序。 MediaElement 尊重此属性,并且不会将应用更改为 DPI 感知。
如果应用程序是 Windows 窗体(不是 WPF)... 还有一个额外的步骤。
为这些 dll 或 System.Windows.Media 命名空间添加项目引用将不会被解析。
PresentationCore.dll
WindowsBase.dll
为什么微软不能在 Windows 窗体 dll 中包含这个程序集属性对我来说是个谜。但是whateva。
注意:一位开发人员在论坛中报告说,在 Visual Studio 调试模式下测试时会忽略此程序集属性。你必须编译一个发布版本来测试它。
【问题讨论】:
-
顺便说一句,系统有 Windows Media Player 12。
标签: c# winforms screen-resolution mediaelement dpi