在WinForm中获取正确的textBlock宽度

时间:2018-08-16 13:11:03

标签: wpf winforms label size textblock

我有一个WPF控件,该控件可以动态创建一些textBlocks并增加字体大小,直到textBlocks具有最大字体大小以适合父级为止。

我正在使用以下方法来获取具有特定fontSize的textBlock的大小:

 private Size MeasureTextBlockSize(TextBlock textBlock)
    {
        // Measured Size is bounded to be less than maxSize
        Size maxSize = new Size(double.PositiveInfinity, double.PositiveInfinity);
        textBlock.Measure(maxSize);
        return textBlock.DesiredSize;
    }

在WPF中,一切都可以正常运行,但是当我在WinForm应用程序中使用控件时,文本将比其父项大。这意味着该方法无法正常工作。

我尝试了使用Labels的相同方法,但结果相同。

您是否知道为什么会发生这种情况或如何解决?

为了更好地理解我的问题,我将附加一些来自WPF和WinForm的图像:

这是WPF:

enter image description here

这是WinForm:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用Graphics对象通过MeasureString()方法来测量字符串:

private void Form1_Load(object sender, EventArgs e)
{
    string testStr = "0#2" + Environment.NewLine
        + "1400" + Environment.NewLine
        + "800";

   var rows = testStr.Split('\n');
    // use graphics object to measure the string using MeasureString() method
    Graphics g = this.CreateGraphics();

    foreach (var row in rows)
    {
        var strSize = g.MeasureString(row, label1.Font);
        Debug.WriteLine("text: {0} width: {1} height: {2}",row, strSize.Width.ToString(),strSize.Height.ToString());
    }

}

输出:

  

文本:0#2宽度:22.56396高度:13.82519
文本:1400宽度:   28.86426高度:13.82519
文本:800宽度:22.56754高度:13.82519