2013-02-05 56 views
1

有一個批評我的應用程序之一。顯示的文字被認爲是模糊的。我有點放大窗口,得到這個結果(所以他們是正確的)TextBlock在WPF 3.5中模糊

Blurry text

從我在這裏試圖在這個簡單的例子導致:

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <StackPanel> 
      <TextBlock Text="StatusDTC [1]"></TextBlock> 
      <TextBlock Text="StatusDTC [2]" 
         RenderOptions.BitmapScalingMode="NearestNeighbor" 
         RenderOptions.EdgeMode="Aliased"></TextBlock> 
      <TextBlock Text="StatusDTC [3]" 
         SnapsToDevicePixels="True"></TextBlock> 
      <TextBlock Text="StatusDTC [4]" 
         SnapsToDevicePixels="True" 
         RenderOptions.BitmapScalingMode="NearestNeighbor" 
         RenderOptions.EdgeMode="Aliased"></TextBlock> 
     </StackPanel> 
    </Grid> 
</Window> 

我發現了類似here東西。但UseLayoutRounding似乎不適用於.Net 3.5。我搜索了一下,發現.Net 4(TextOptions.TextRenderingMode)解決了這個問題,但是使用這個應用程序切換到.Net 4並不是一種選擇。我知道Win7呈現WPF不同於XP,我也開始了一個虛擬的XP,並嘗試在那裏。結果是一樣的。

有人有一個想法來清晰.net 3.5中的文本?

+0

另請參閱此文章:http://stackoverflow.com/questions/190344/wpf-blurry-fonts-problem-solutions(主要是4.0) – fixagon

回答

1

the link from Ameen's answer解釋,這個問題大多出現在小字體大小。

是增加了字體大小爲你的選擇嗎?我知道,這是一個多解一個解決辦法,但它是一個快速如果你不能離開Framework 3.5,那麼簡單的方法就可以擺脫這種模糊性。

3

我不認爲使用位圖字體不足,你可以在這裏做任何事情。 :(BitmapScalingMode應該不會影響您當前的示例,只要您使用的字體是基於矢量的,您確實需要4.0 text improvements

在Windows 7中,文本圖紙已切換爲DWrite,這就是爲什麼它與XP不同。

+1

只是爲了確認,WPF中相對模糊的文本是一個長期存在的問題,只在.NET 4.0中得到修復。如果你想讓WPF呈現你的文本,那麼讓它看起來像正常的Windows文本一樣清晰的唯一方法是使用v4.0(這是公平的,大約3年前發佈的!)。 –

+0

@IanGriffiths當然,.Net4並不是全新的東西。但有些事情是公司的決定,因此超出了我的影響力範圍: - /感謝您爲我的死衚衕做了一個水晶。現在我可以停止搜索,這也有幫助。 – Markus

+0

+1。我偷了你的鏈接。 ;-) – Heinzi

2

如果升級到.NET 4.0絕對不是一種選擇,那麼您可以考慮最後一個(稍微絕望)選項:獲取其他內容以呈現文本。例如,您可以使用GDI +將需要的文本呈現爲位圖,然後顯示該文本。或者您可以使用互操作來託管Windows窗體標籤控件。

這些都是真正可怕的解決方案(這就是爲什麼我只是在評論中證實使用WPF的最新版本不是一種選擇後才提出這一點)。互操作將導致所有常見的HWND互操作問題(即,標籤將獲得自己的HWND,這意味着它將完全與WPF內容分開,這可能導致明顯的視覺不連續性。)

所以如果我被困在這種情況下,我想我會考慮渲染到位圖的選項。可以使用GDI +生成一個位圖,然後您可以使用WPF圖像元素進行渲染。如果你準備編寫一個自定義控件來做到這一點,你甚至可以支持諸如數據綁定之類的東西(通過爲你渲染的文本定義一個Text依賴項屬性)。儘管在支持Windows位圖方面存在共同點,但將數據從GDI +世界轉移到WIC(Windows成像組件,這是WPF依賴於其位圖處理所依賴的)是......很混亂。另外,如果您有任何需要支持輔助功能(例如,使屏幕閱讀器可見的文本,支持助記鍵的訪問鍵等),那麼這將變成一項相對複雜的工作。

+0

謝謝,理論可能性很好。在綁定的DataGrid(來自WPF工具包,因爲3.5)有幾百個條目和許多列,我將冒險這裏可能沒有嘗試。對於其他人來說,這可能是一種方式。 – Markus