Das Problem wird unter folgenden Links beschrieben und demonstriert:
- Paul Stovell WPF: Verschwommenes Text-Rendering
- www.gamedev.net Forum
- Microsoft Connect: Der WPF-Textrenderer erzeugt bei kleinen Schriftgrößen stark unscharfen Text
Erläuterung: Textklarheit in WPF . Dieser Link hat einen Schriftvergleich.
Ich möchte alle möglichen Lösungen für dieses Problem sammeln. Microsoft Expression Blend verwendet WPF, aber Schriftarten sehen lesbar aus.
- Dunkler Hintergrund wie in Microsoft Expression Blend
- Erhöhen der Schriftgröße und Ändern der Schriftart (Calibri ...) [Link]
- Windows-Formulare einbetten [Link]
- Verwenden Sie die GDI + - und / oder Windows Forms TextRenderer-Klasse, um Text in eine Bitmap zu rendern, und rendern Sie diese Bitmap dann als WPF-Steuerelement. [Verknüpfung]
Gibt es noch weitere Lösungen?
Dies wird in VS2010 (und WPF4) Beta 2 behoben
Es sieht so aus, als wäre es endgültig gelöst worden!
Scott Hanselmans ComputerZen.com: WPF und Text Blurriness, jetzt mit vollständiger Klarheit
Antworten:
Technischer Hintergrund
Es gibt einen ausführlichen Artikel über das Rendern von WPF-Text von einem der WPF-Textprogrammmanager auf windowsclient.net: Textklarheit in WPF .
Das Problem besteht darin, dass WPF einen linear skalierenden Font-Renderer für reibungslose Animationen benötigt. Pure ClearType hingegen benötigt mit der Schriftart einiges an Freiheit, um vertikale Stämme in das nächste Pixel zu verschieben.
Der Unterschied ist offensichtlich, wenn man das klassische "Kaskaden" -Muster vergleicht. WinForms unten links, WPF oben rechts:
Obwohl ich auch kein Fan von WPFs Eigenheiten beim Rendern von Schriftarten bin, kann ich mir das Geschrei vorstellen, wenn die Animationen wie in der Winforms-Kaskade springen würden.
Mit der Registrierung spielen
Von besonderem Interesse für mich war der Link zum MSDN-Artikel " ClearType-Registrierungseinstellungen ", in dem die möglichen benutzerseitigen Anpassungen in der Registrierung erläutert werden:
Das Herumspielen mit diesen Einstellungen hat das zugrunde liegende Problem nicht wirklich verbessert, kann jedoch helfen, indem der Farbblutungseffekt für empfindliche Benutzer verringert wird.
Ein anderer Ansatz
Der beste Rat, den der Artikel über Textklarheit gab, war, die Schriftgröße zu erhöhen und die Schriftart zu ändern. Calibri funktioniert für mich besser als die Standard-Segoe-Benutzeroberfläche. Aufgrund seiner Beliebtheit als Web-Schriftart habe ich auch Verdana ausprobiert, aber es hat einen fiesen Gewichtssprung zwischen 14pt und 15pt, der beim Animieren der Schriftgröße sehr gut sichtbar ist.
WPF 4.0
WPF 4 bietet eine verbesserte Unterstützung für die Beeinflussung des Renderns von Schriftarten. Im WPF-Textblog gibt es einen Artikel, in dem die Änderungen erläutert werden. Am bekanntesten ist, dass es jetzt (mindestens) drei verschiedene Arten der Textwiedergabe gibt:
<grumble> Das sollte für jeden Designer genug Seil sein. </ murren>
quelle
.NET 4 hat endlich eine Lösung für die schlechte Textwiedergabequalität von WPF, ist aber gut versteckt. Stellen Sie für jedes Fenster Folgendes ein:
Der Standardwert ist "Ideal", was der Name überhaupt nicht impliziert.
Es gibt zwei weitere Optionen in TextOptions, nämlich TextHintingMode und TextRenderingMode, aber beide haben sinnvolle Standardeinstellungen.
quelle
Ich bin neulich auf ein Problem gestoßen, als ich einen Rahmen verwendet habe, auf den DropShadowEffect angewendet wurde. Das Ergebnis war, dass der gesamte Text innerhalb dieses Rahmens extrem verschwommen war. Es spielt keine Rolle, ob sich Text in anderen Bereichen oder direkt unter dem Rand befand - ein Textblock, der dem übergeordneten Element untergeordnet ist und einen Effekt hat untergeordnet angewendet wird, scheint betroffen zu sein.
Die Lösung für diesen speziellen Fall bestand darin, keine Inhalte in den Rahmen einzufügen, die Auswirkungen haben, sondern stattdessen ein Raster (oder etwas anderes, das das Übereinanderlegen von Inhalten unterstützt) zu verwenden und ein Rechteck in derselben Zelle wie der Text zu platzieren (z als Geschwister im visuellen Baum) und setzen Sie die Auswirkungen darauf.
Wie so:
quelle
Dies wird in VS2010 (und WPF4) Beta 2 behoben:
quelle
SnapToDevicePixels gilt nur für WPF-Formen (Linien usw.), nicht für Textrenderer.
Es ist keine Problemumgehung für dieses Problem bekannt. Laut Microsoft ist das Verhalten "beabsichtigt".
Lesen Sie auch diesen Thread in Microsoft-Foren, in dem die Probleme besprochen werden. Er hat einige Antworten von MS-Mitarbeitern erhalten, die ihre Position zu diesem Thema klarstellen.
quelle
Aus Entwicklersicht besteht die einzige bisher bekannte "Problemumgehung" darin, GDI + und / oder Windows Forms TextRenderer zu verwenden, um Text in eine Bitmap zu rendern, und diese Bitmap dann als WPF-Steuerelement zu rendern. Abgesehen von offensichtlichen Auswirkungen auf die Leistung wird das Problem für vorhandene Anwendungen dadurch nicht behoben.
Ich habe jetzt ein Microsoft Connect-Ticket für dieses Problem erstellt (zu meiner Überraschung gab es trotz aller Negativität keinen tatsächlichen Fehlerbericht im angegebenen Tracker).
Da dies einer der offiziellen Kanäle für die Übermittlung von Anfragen und Fragen an Microsoft ist, würde ich empfehlen, ihn auch für eine schnellere Antwort durchzugehen. Wenn Sie möchten, dass das Problem auf die eine oder andere Weise behoben wird, können Sie zumindest durch die Abstimmung für dieses Ticket und / oder die Validierung des Problems die Aufmerksamkeit von Microsoft PMs und Ingenieuren auf dieses Problem lenken und möglicherweise die wahrgenommene Priorität erhöhen.
quelle
Ich sehe es nicht als Fehler, aber die Standardkonfiguration ist in der Tat sehr ärgerlich. Hier ist ein Vergleich aller Kombinationen von
SnapToDevicePixels
macht beim Text-Rendering keinen Unterschied.Ich bevorzuge:
wo vertikale Linien niemals verschwommen sind.
Die verwendete Schriftart ist Open Sans Light, die sehr schön sein kann, wenn sie gut verwendet wird, wie im neuesten TeamViewer.
Für Benutzer von Mahapps.Metro ist das Problem
TransitioningContentControl
https://github.com/MahApps/MahApps.Metro/issues/889quelle
Ich habe gerade die Beta-Version von VS2010 ausprobiert, die alle in WPF ausgeführt wird, und sie leidet SCHLECHT unter dem Problem mit verschwommenen Schriftarten. Besonders auf Tooltips.
Das scheint einige Beweise dafür zu geben, dass WPF4 das Problem tatsächlich nicht lösen wird (wenn überhaupt, sieht es schlimmer aus)
quelle
Wow, ich kann nicht glauben, dass ich endlich meine WPF-Schriftarten lesbar habe. Und ich kann auch nicht glauben, dass es keinen Optionsdialog gibt, um diese Änderungen zu vereinfachen, während die Standardwerte auf meinem Display schrecklich sind.
Diese Registrierungseinstellungen (in Dezimalzahlen) haben bei mir funktioniert und kommen meiner regulären Cleartype-Schriftart am nächsten:
quelle
Sie sagen, dass "SnapToDevicePixels = true" funktioniert, aber ich habe noch nie gute Ergebnisse gesehen.
Ich bekämpfe den unscharfen Text, indem ich zu einer anderen Schriftart wechsle.
Offensichtlich ist dies keine Lösung für das Problem, aber so habe ich es umgangen.
quelle
Wenn Sie es vorziehen, eine C # -Basisklasse zum Anpassen von Fenstern für Ihre App zu verwenden (oder jetzt einen Grund dafür haben), können Sie die Textformatierung wie folgt festlegen, um den ansprechenden Anzeigemodus zu verwenden:
quelle