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

D.A*_*ndy 17 c# wpf-controls .net-4.6.2

当我尝试使用.net framework 4.6.2构建WPF项目时,我收到一个错误,因为FormattedText()已被废弃如下: [已废弃("使用PixelsPerDip覆盖",false)] public FormattedText(string textToFormat, CultureInfo culture,FlowDirection flowDirection,Typeface typeface,double emSize,Brush foreground);

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

问:如何确定pixelsPerDip?

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

小智 21

您需要计算显示器的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/微软/ WPF样本/树/主/ 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;


Mik*_*kis 5

接受的答案并没有错,但是需要阅读大量的文本,最后您仍然没有直接的解决方案,您可以快速输入并让问题消失。

该警告表明,这种特定的重载FormattedText()已被废弃,但您应该使用另一种重载。

因此,一般来说,您需要做的就是替换它:

new FormattedText( ... );

有了这个:

new FormattedText( ..., 1.0 );