In.NET Framework 4.6.2 FormattedText () устарел, как я могу его исправить
когда я пытаюсь построить проект WPF с .net framework 4.6.2, я получил ошибку, потому что FormattedText () устарел, как показано ниже: [устарело ("использовать переопределение PixelsPerDip", false)] public FormattedText (string textToFormat, CultureInfo культура, FlowDirection flowDirection, шрифт шрифта, двойной emSize, кисть переднего плана);
новый метод переопределения public FormattedText (строка textToFormat, культура CultureInfo, FlowDirection flowDirection, шрифт шрифт, двойной emSize, кисть переднего плана, двойной pixelsPerDip);
Q: Как я могу определить pixelsPerDip ?
Q: Как я могу использовать старый конструктор без pixelsPerDip? ведь pixelsPerDip бесполезно для моего проекта.
1 ответов
вам нужно рассчитать DPI вашего монитора, см.: Как я могу получить DPI в 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://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI
IMHO этот парараметр был добавлен, чтобы вашу программу можно было перетаскивать между мониторами с разными DPI и по-прежнему масштабируется правильно.
из объявления FromattedText: pixelsPerDip: Пиксели на плотность независимое значение пикселя, которое эквивалентно масштабному коэффициенту. Например, если DPI экрана 120 (или 1.25, потому что 120/96 = 1.25), 1.25 пикселей на плотность рисуется независимый пиксель. DIP-единица измерения, используемая WPF, чтобы быть независимой от разрешения устройства и DPIs.
Если у вас есть только 1 монитор и поэтому вам не нужна обработка событий с измененным DPI, используйте следующее, например, в событии OnLoaded () вашего окна (или в вашем конструкторе):
var pixelsPerDip = VisualTreeHelper.GetDpi (это).PixelsPerDip;