2009-04-30 9 views

Antwort

17

Der Grund dafür ist das Anti-Aliasing-System, das die Linie über mehrere Pixel verteilt, wenn es nicht mit physischen Gerätepixeln ausgerichtet ist.

WPF ist unabhängig von der Auflösung. Dies bedeutet, dass Sie die Größe eines Benutzeroberflächenelements in Zoll angeben, nicht in Pixel. Eine logische Einheit in WPF ist 1/96 Zoll. Diese Skala wird gewählt, da die meisten Bildschirme eine Auflösung von 96 dpi haben. In den meisten Fällen entspricht also 1 logische Einheit einem physikalischen Pixel. Wenn sich die Bildschirmauflösung ändert, ist diese Regel nicht mehr gültig.

Alle WPF-Steuerelemente bieten eine Eigenschaft SnapsToDevicePixels. Wenn diese Option auf "true" gesetzt ist, stellt das Steuerelement sicher, dass alle Kanten exakt auf physischen Gerätepixeln gezeichnet werden. Aber leider ist diese Funktion nur auf der Steuerungsebene verfügbar.

Quelle: Draw lines excactly on physical device pixels

+0

Beachten Sie, dass die SnapToDevicePixels-Eigenschaft keinen Einfluss auf Textglyphen hat. Versuchen Sie dies auf TextBlock, um zu sehen, was ich meine. Leider stecken wir vorerst mit verschwommenem Text fest. –

+1

Es gibt mehr über verschwommene Schriften hier: http://StackOverflow.com/Questions/190344/Wpf-blurry-Fonts-Problem-Solutions – Spoike

2

Quick Fix:

diese Optionen auf Verwenden Sie jeden Container von der Wurzel zu Ihrem verschwommenen Steuer

 UseLayoutRounding="True" 
     RenderOptions.BitmapScalingMode="NearestNeighbor" 
     SnapsToDevicePixels="True" 
     RenderOptions.ClearTypeHint="Enabled" 

Erläuterung:

UseLayoutRounding = true behebt Subpixel-Layout-Probleme . Sie treten oft auf, weil z.B. Effekte passen die Größe der Steuerelemente an etwas zwischen Pixeln an.

RenderOptions.BitmapScalingMode = Nächster Nachbar behebt verschwommenes Sampling von Bitmaps. Bitmaps werden verwendet, wenn Effekte oder andere Techniken verwendet werden. Wenn sie erneut auf den Container oder die Steuerung angewendet werden, können sie zwischen Pixeln enden und daher die Pixel der Bitmap interpolieren.

SnapsToDevicePixels = "True" fixe vertikale und horizontale Polygonen, Linien und Rechtecken dazwischen Pixel

auf Text

RenderOptions.ClearTypeHint = "Enabled" Aktiviert das Cleartype gerendert werden. Es wird sehr einfach durch Effekte oder immer dann deaktiviert, wenn der Renderer den genauen Hintergrund eines Textes nicht kennt.

Sie sollten es auf jedem Container verwenden, weil manchmal, z. Bei Datenvorlagen sind diese Optionen für die Untersteuerelemente wieder voreingestellt.

+1

Addition: Sie könnten auf visuelle Probleme auf 4K-Bildschirmen oder bei anderen Gelegenheiten auftreten. Zum Beispiel kann Text in der Mitte zerrissen werden oder einige Pixel fehlen komplett, sogar ganze 1 Pixel Zeilen können unsichtbar werden. Sie benötigen zusätzliche Techniken, um diese Probleme zu beheben. – ecreif

Verwandte Themen