在 .NET Framework 4.6.2 中,FormattedText() 已过时,我该如何修复它

2024-02-09

当我尝试使用 .net Framework 4.6.2 构建 WPF 项目时,出现错误,因为 FormattedText() 已过时,如下所示:[已过时(“使用 PixelsPerDip 覆盖”, false)] 公共FormattedText(字符串textToFormat,CultureInfo文化,FlowDirection flowDirection,Typeface字体,double emSize,画笔前景);

新的覆盖方法是公共FormattedText(字符串textToFormat,CultureInfo文化,FlowDirection flowDirection,Typeface字体,双emSize,画笔前景,双pixelPerDip);

问:如何确定pixelsPerDip?

问:如何使用没有pixelsPerDip 的旧构造函数?,因为pixelsPerDip 对我的项目没有用。


您需要计算显示器的 DPI,请参阅:如何获取 WPF 中的 DPI? https://stackoverflow.com/questions/1918877/how-can-i-get-the-dpi-in-wpf

此外,.Net 4.6.2 提供了新的 API 来处理 DPI 感知,因此上述方法可能会被弃用(例如 VisualTreeHelper.GetDpi())。 看https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/ https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/这是一些示例代码和用户指南:https://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI https://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI

恕我直言,已添加此参数,以便您的程序可以在具有不同 DPI 的显示器之间拖动,并且仍然可以正确缩放。

来自 FromattedText 声明:pixelsPerDip:

每密度像素独立像素值,即 相当于比例因子。例如,如果屏幕的 DPI 是 120(或 1.25,因为 120/96 = 1.25),每密度 1.25 像素 绘制独立像素。 DIP是WPF使用的测量单位 独立于设备分辨率和 DPI。

如果您只有 1 个显示器,因此不需要任何 DPI 更改事件处理,请在 Window 的 OnLoaded() 事件(或构造函数)中使用以下示例:

var pixelsPerDip =  VisualTreeHelper.GetDpi(this).PixelsPerDip;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 .NET Framework 4.6.2 中,FormattedText() 已过时,我该如何修复它 的相关文章

随机推荐