相关疑难解决方法(0)

WPF相当于TextRenderer

我习惯于TextRenderer测量字符串的长度,因此适当地调整控件的大小.在WPF中是否有等价物,或者我可以简单地使用TextRendered.MeasureString

.net c# wpf

14
推荐指数
2
解决办法
8771
查看次数

使文本与TextBlock顶部齐平放置(我保证,不是VerticalAlignment!)

我试图使文本与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会渲染与文本区域顶部正确对齐的相同字体。

是否有人对造成差距的原因以及如何消除差距有任何想法?

这是我尝试过的一些方法:

  1. 将VerticalAlignment设置为顶部

  2. LineStackingStrategy设置为“ BlockLineHeight ”,并将LineHeight值设置为Font size的值。(虽然这似乎有很大帮助,但这会影响所有文本行(如果是多行的话)。我希望可以找到一个仅影响顶部空间的解决方案。)

  3. 在自定义类中呈现文本。(我真的想避免这样做,因为我必须重新创建TextBlock的所有功能。)

编辑:

万一其他人需要它,在BlueMNETscape的帮助下,还有这个非常方便的链接: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)

c# wpf fonts xaml styles

3
推荐指数
1
解决办法
427
查看次数

标签 统计

c# ×2

wpf ×2

.net ×1

fonts ×1

styles ×1

xaml ×1