我试图使文本与TextBlock顶部齐平,但没有成功,我总是在文本上方留有几个像素的空隙。
字体越大,间距越大,因此在说12的字体大小上并不是很明显,但是50的大小使其非常明显
链接到图片[ http://i.stack.imgur.com/dJFVY.png]
产生这种情况的代码示例是:
<TextBlock Background="LightCyan"
VerticalAlignment="Top"
FontSize="12"
Text="The quick brown fox"/>
<TextBlock Background="Aqua"
VerticalAlignment="Top"
FontSize="50"
Text="The quick brown fox"/>
<TextBlock Background="LightGray"
VerticalAlignment="Top"
FontSize="80"
Text="The quick brown fox"/>
Run Code Online (Sandbox Code Playgroud)
我也不认为它的Font本身有问题,例如photoshop会渲染与文本区域顶部正确对齐的相同字体。
是否有人对造成差距的原因以及如何消除差距有任何想法?
这是我尝试过的一些方法:
将VerticalAlignment设置为顶部
将LineStackingStrategy设置为“ BlockLineHeight ”,并将LineHeight值设置为Font size的值。(虽然这似乎有很大帮助,但这会影响所有文本行(如果是多行的话)。我希望可以找到一个仅影响顶部空间的解决方案。)
在自定义类中呈现文本。(我真的想避免这样做,因为我必须重新创建TextBlock的所有功能。)
编辑:
万一其他人需要它,在BlueM和NETscape的帮助下,还有这个非常方便的链接:TextBlock像大写字母一样大(忽略字体升序/降序),G。Sofien有一个很酷的解决方案,我使用他们的所有想法实现了这一点:
在我的代码后面,我已经有一个代表我的文本的对象(用于拖放式程序)。在它的构造函数中,我添加了以下代码:
Typeface typeface = new Typeface(Font_Family, Font_Style, Font_Weight, new FontStretch());
GlyphTypeface glyphTypeface;
typeface.TryGetGlyphTypeface( out glyphTypeface );
double baseline = glyphTypeface.Baseline * Font_Size;
double capsHeight = glyphTypeface.CapsHeight …Run Code Online (Sandbox Code Playgroud)