2012-02-14 180 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