c# - WPF 格式化文本 : Calculate font size to fill available height space

标签 c# wpf font-size formatted-text

这是我的 FormattedText,它是 Canvas 的子元素:

             this.formattedText = new FormattedText(
                                "This is a text to test",
                                CultureInfo.CurrentUICulture,
                                this.FlowDirection,
                                new Typeface(this.FontFamily, this.FontStyle, this.FontWeight, FontStretches.Normal),
                                this.FontSize,
                                Fill);

请看这张图:

enter image description here

第三种形式是我想要的, 但我不知道如何计算字体大小以适合高度(不是宽度), 因为有不同高度的不同字体,以及不同的FontFamily.LineSpacing

注意:我不想使用ViewBox,因为我想将文本动画化为抓取文本和自动收报机。

更新:

有些字体需要FontSize超过控件的高度,这取决于FontFamily.LineSpacing。我可以通过设置 LineHeight 移除上部空间,但我无法根据 FontFamily.LineSpacing 计算新的 FontSize。

请帮帮我。

最佳答案

您可以使用循环来获取最大字体大小(步长 1):

int MaxFontSize = 0;
FormattedText Ft = ... //Your formatted text
while(true)
{
  Ft.SetFontSize(MaxFontSize);
  if (Ft.Height > MaxHeigthOfControl)
  {
    //Too large! Maxmimum size found one step before
    MaxFontSize--;
    break;
  }
  else
  {
    MaxFontSize++;
  }
}
//MaxFontSize is the maximum possible FontSize

如果这种递增的方式会变慢......尝试使用如图所示的近似值来做到这一点: enter image description here

关于c# - WPF 格式化文本 : Calculate font size to fill available height space,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37167087/

相关文章:

c# - SQLite问题“无法打开数据库文件”

c# - 更改网格中行的背景颜色

android - 在 AlertDialog 中更改 ListView 的字体大小

css - 为什么使用 em 字体大小会破坏行高?

c# - Handler.ashx C# 到 Java、基于 ExtJs 的 TinyMCE 文件和图像管理器插件

c# 上周开始日期

c# - 从后面的代码更新 ComboBox SelectedItem

javascript - 为什么我的文本没有响应?

c# - LINQ 包含语法问题

c# - DataGrid 的混淆行为