【问题标题】:Sizing WPF TextBox length to max number of characters allowed inside a report textbox将 WPF 文本框长度调整为报告文本框中允许的最大字符数
【发布时间】:2019-11-04 09:46:41
【问题描述】:

我知道这可能是一个难以回答的问题,但有人要求我找到负担得起的解决方案,但我不知道从哪里开始。 我有一个通过 Word 制作的现有报告,并且有一个可替换的文本,其中包含通过 WPF 应用程序作为输入插入的数据。

现在,由于 WPF 部分目前没有长度控制,如果我放置更多字符,那么当前可见的字符将会丢失。我需要一种基于固定字体长度计算允许的平均字符数的方法。

并非所有字符的宽度都相同,例如“O”大于“i”;我的想法是计算可以插入的最大 O 数,最大 i 数并取平均值。从该值中减去 15% 以获得安全值。有更好的方法吗?

提前致谢

【问题讨论】:

  • 到目前为止你尝试过什么?请分享您的代码和 xaml
  • 这个问题根本没有意义。你想要一种计算 TextBox 中可见文本大小的方法吗?还是需要设置 MaxLength 属性?
  • 我需要一种方法来计算报告文本框最大字符的大小,所以我可以把它放在我的 WPF TextBox 中。我知道如何设置最大长度

标签: c# wpf algorithm


【解决方案1】:

您可以尝试使用FormattedText。收听TextBox.TextChanged 事件并在到达TextBox.MaxLength 时测量文本:

private void OnTextBoxTextChanged(object sender, EventArgs e)
{
  var textBox = sender as TextBox;
  if (textBox.Text.Length == textBox.MaxLength)
  {
    // Create a formatted text string that has the max number of allowed characters.
    // and has therefore reached its maximum length
    FormattedText formattedText = new FormattedText(
        textBox.Text,
        CultureInfo.GetCultureInfo("en-us"),
        FlowDirection.LeftToRight,
        new Typeface("Verdana"),
        32,
        Brushes.Black);

   textBox.Text.Width = formattedText.Width;
}

或者,您可以使用您选择的字符数创建一个 FormattedText,该 FormattedText 由已知最宽的字符(我认为大多数时候是“M”或“W”)和 TextBox.MaxLength 个字符组成 字体,然后使用FormattedText.Width 来初始化TextBox.Width

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多