2012-02-14 72 views
1

我想當幾個TextBlocks位於一行(即在水平方向的StackPanel中)時,它們應該看起來好像是一個TextBlock。但是,我發現:TextBlock內部邊距

enter image description here

第一行顯示 「EEEE」 一個TextBlock。第二個是包含4個TextBlocks的StackPanel,每個TextBlock包含「e」。從上圖可以看出,第二行比第一行長一點。它看起來像TextBlocks有一些內部邊緣。但是,就我而言,我想阻止它。 那麼,你知道該怎麼做嗎?

回答

1

嘗試將TextBlockPaddingMargin設置爲零。

<TextBlock Padding="0" Margin="0" ... /> 

既然你說你會想這樣做多的TextBlocks,你應該有可能使用Style做到這一點。

<StackPanel Orientation="Horizontal"> 
    <Style TargetType="TextBlock"> 
     <Setter Property="Padding" Value="0" /> 
     <Setter Property="Margin" Value="0" /> 
    </Style> 

    ... 
</StackPanel> 

如果這樣沒有幫助,那麼你可以開始使用負margin:

Margin="-1,0,0,0" 

然而,這引入了脆性到你的代碼,因爲文字之間的間距取決於字體大小和文本顯示。例如,如果將字體大小更改爲13,則不會再有五個小寫字母'e'出現此問題。不過,將文本更改爲大寫'E'將導致同樣的問題。

您可以嘗試使用TextBlock上的剪輯屬性,甚至渲染影響,但這似乎很多工作只是爲了讓文字調整幾個像素。請問你爲什麼試圖讓兩個文本樣本看起來一樣?

更新: 我懷疑,你可以找到一個很好的辦法,使這項工作,你想要的方式。你可以看看使用RichTextBox或創建一個自定義控件。

Here是一個很好的使用RichTextBox文本突出顯示(雖然它是前景突出顯示)。

+0

它並沒有幫助... – andrew 2012-02-14 13:23:04

+0

嗯,這似乎是比我想象的更復雜。我用一些評論更新了我的答案。 – 2012-02-14 14:44:49

+0

我這樣做的原因是我正在實現HighlightedTextBlock控件,其中可以突出顯示某些單獨的部分(我說的意思是改變背景顏色而不是前景),它將用於項目模板中的某些部分列表框和項目將被動態突出顯示搜索到的文本。對於某些字體大小(正如您所提到的,文本之間的間距取決於字體大小和顯示的文本),當搜索到的文本發生更改時,這些項目的某些部分會發生移動,這一點非常明顯。 – andrew 2012-02-15 08:41:08