在.net框架4.6.2的FormattedText()是过时的,我该如何修复它

本文关键字:过时 何修复 框架 net FormattedText | 更新日期: 2023-09-27 18:15:04

当我尝试用。net框架4.6.2构建WPF项目时,我得到了一个错误,因为FormattedText()过时如下:[废弃("使用PixelsPerDip覆盖",false)]public FormattedText(string textToFormat, CultureInfo culture, FlowDirection FlowDirection, Typeface Typeface, double emSize, Brush前景);

新的覆盖方法是public FormattedText(string textToFormat, CultureInfo culture, FlowDirection FlowDirection, Typeface Typeface, double emSize, Brush foreground, double pixelsPerDip);

问:如何确定pixelsPerDip ?

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

在.net框架4.6.2的FormattedText()是过时的,我该如何修复它

您需要计算显示器的DPI,参见:我如何在WPF中获得DPI ?

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

IMHO这个参数已经被添加,以便您的程序可以在具有不同dpi的监视器之间拖动,并且仍然是正确缩放的。

From frommattedtext声明:pixelsPerDip:

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

如果你只有一个监视器,因此不需要任何DPI改变的事件处理,使用以下例子,在你的窗口(或在你的构造函数)的OnLoaded()事件:

var pixelsPerDip =  VisualTreeHelper.GetDpi(this).PixelsPerDip;

公认的答案并没有错,但是在阅读了相当多的文本之后,您仍然没有直接的解决方案,您可以快速键入并使问题消失。

这个警告是说这个特定的FormattedText()过载已经过时了,但是另一个存在,您应该使用。

所以,一般来说,你所需要做的就是替换这个:

new FormattedText( ... );

与这个:

new FormattedText( ..., 1.0 );