(編輯1月18至補充說,它不只是字體渲染模式,而且字體本身。)
這裏有兩個相關因素:字體和字體格式模式。
Windows窗體宿主應用程序很有氣勢的「Microsoft無襯線」默認字體家族在8.25pt的字體大小,這在WPF的計量單位是11。FontSize
但WPF通常會使用不同的字體 - 我運行默認的Aero主題的Windows 7,而WPF默認爲Segoe UI,FontSize
爲12.
因此,您在這裏看到不同結果的最大原因是它們是兩種不同的字體。將FontFamily="Segoe UI" FontSize="12"
添加到UserControl
根元素使得兩個WPF示例看起來更加一致。 (不過,這當然使你的WPF文字看起來與在包含Windows窗體應用程序。這就是全部的原因ElementHost
傳播的Windows窗體字體選擇到WPF內容。文字不太一致)
我編輯在此之前,我曾認爲這可能是由於WPF文本呈現的Ideal
和Display
模式之間的差異。意識到它主要是關於字體的,我不再認爲是這種情況,但是我將在此討論這個其他問題,因爲對於任何想讓他們的WPF文本與他們的Windows保持一致的人都是有用的形成文本。 WPF的默認值爲Ideal
,但如果您在Windows窗體應用程序中運行,則可以認爲Display
更好,因爲這會使其與Windows窗體通常呈現的內容看起來一致。
您可以在WPF中每個元素的基礎上,加入此控制這一點:
TextOptions.TextFormattingMode="Display"
(或"Display"
取決於哪種模式你想要的)。 WPF v4中增加了這種可附加屬性,讓您可以在WPF自第一次發佈以來的可縮放但略微模糊的文本呈現中進行選擇,以及Win32和GDI +(並因此Windows表格)使用。這會影響你應用它的元素,以及任何後代。 (例如,如果您將其設置爲StackPanel
,則應將其應用於該面板中的所有元素,除非您還將其設置爲兒童本地的其他值。)
默認情況下,WPF會嘗試保持比原始字體設計更好的保真度,而不是Win32或GDI +。而且它也以某種方式呈現文本,這意味着它可以一致地縮放 - 將字體大小增加12%將使文本的寬度在屏幕上增大12%。在Win32或GDI +中,情況並非如此,您可以獲得更復雜的非線性更改。
但是很多人抱怨說,爲了獲得更好的保真度,你會得到模糊感增加。所以這就是爲什麼WPF 4引入了新的屬性。將其設置爲Display
以獲得低保真但更清晰的舊式渲染。
由於您可以根據每個元素進行選擇,因此您可以根據自己的粗體和普通文本自主選擇喜歡的外觀。
對不起,我沒有寫它,我已經嘗試過TextFormattingMode和SnapsToDevicePixels - 沒有託管UserControl的結果。 – 2011-01-13 15:45:34