2016-10-27 8 views
9

Kiedy próbuję zbudować projekt WPF z .NET framework 4.6.2, mam błąd, ponieważ FormattedText() jest przestarzały poniżej: [Przestarzałe ("Użyj przesłonięcia PixelsPerDip", false)] public FormatsedText (string textToFormat, kultura CultureInfo, FlowDirection flowDirection, krój pisma, double emSize, pierwszy plan pędzla);W .NET Framework 4.6.2 FormattedText() jest przestarzały, jak mogę go naprawić

Nowa metoda przesłanianie jest FormattedText publicznych (string textToFormat, CultureInfo kultury, flowDirection flowDirection, Czcionka krój, podwójny emSize, na pierwszym planie Brush dwukrotnie pixelsPerDip);

P: Jak ustalić pixelPerDip?

P: Jak używać starego konstruktora bez pikseliPerDip ?, ponieważ pikselePerDip jest bezużyteczny dla mojego projektu.

Odpowiedz

11

Trzeba obliczyć DPI monitora, patrz: How can I get the DPI in WPF?

Ponadto z .Net 4.6.2 pojawiają się nowe interfejsy API do obsługi świadomości DPI, więc powyższe metody mogą być nieaktualne (np VisualTreeHelper .GetDpi()). Zobacz https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/ Oto przykładowy kod i userguide: https://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI

IMHO to pararameter został dodany tak, że program może być przeciągnięty między różnymi monitorami DPI i nadal jest skalowany prawidłowo.

Z deklaracji FromattedText: pixelsPerDip: Wartość Pixels Per Density Independent Pixel, która jest równoważna współczynnikowi skali. Na przykład, jeśli DPI ekranu wynosi 120 (lub 1,25, ponieważ 120/96 = 1,25), zostanie narysowany 1,25 piksela na piksel niezależny od gęstości. DIP to jednostka miary używana przez WPF, która jest niezależna od rozdzielczości urządzenia i DPI.

Jeśli tylko mają 1 monitor i dlatego nie potrzeba żadnego DPI zmieniony obsługi zdarzenia, należy użyć następujących przykładowo w onLoaded() przypadku okna (lub konstruktora):

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

+0

Dzięki Leguanjoe –

+0

Dzięki Leguanjoe, jednak mój projekt nie może zmienić monitorów, więc czy wiesz, że istnieje wartość domyślna, którą mogę ustawić? (np. "-1") lub coś innego mogę użyć tego konstruktora bez uzyskania DPI, z góry dziękuję –

+0

Używałbym metody VisualTreeHelper, jeśli nie chcesz, użyłbym "1.0", aby funkcja oczekuje monitora o rozdzielczości 96 DPI. Nie jestem nawet pewien, czy ta wartość wchodzi w grę, gdy używasz tylko 1 ekranu. Próbowałem "5" i nadal nie widziałem zmiany rozmiaru FormattedText. – Leguanjoe

Powiązane problemy