2012-01-09 106 views
6

目前,如果我有一个字体大小为200的<TextBlock>元素,整个元素占用的空间比需要的多得多。最小化文本块的大小

Wasted Space

蓝色轮廓(从混合)表示的空间中的元件占据,需要容易的一半时。无论如何,我可以消除这样的空间,使我的元素不会太多?我试过保证金,填充等,但大多数方法似乎并没有工作。

Ideal

理想我想的<textblock>占用仅由红色框

编辑表示的空间量:

With Lower Cased Letters

针对stijn7,一些空间确实用于其他字母(g,p,q等)。然而,顶部还有很多空间(1是Segoe UI中最高的角色)。如果裁剪文本块是不可能的,是否有反正我可以调整它,使没有浪费的空间?

+2

也许是这样,因为其他角色需要这个空间?尽管如此,有趣的问题。 – stijn 2012-01-09 08:52:37

+0

顶部空间是用于各种语言的特殊字符,如^和'。如果你看看角色地图中的Segoe,你可以看到这些。 – dex3703 2013-02-13 23:20:38

回答

1

这里的问题在于TextBlock的高度合并了ascender and descender以便渲染具有高度范围的字符。您选择的字符恰好跨越字体x-height,但不超出。为了实现你的效果后,你将需要一个稍低的文本渲染API,我会建议您尝试FormattedText类:

提供低级别控制在Windows演示 基金会绘制文本(WPF)应用。

此课程有MaxTextHeight属性。我没有试过这个,但是它有可能会给你提供你需要的信息。

1

TextBlock公开了两个属性,LineHeight和LineStackingStrategy来手动设置高度。请注意,您必须将LineStackingStrategy设置为“BlockLineHeight”才能使LineHeight生效。

<TextBlock LineHeight="180" LineStackingStrategy="BlockLineHeight" Text="0" FontSize="200"/>