【问题标题】:Get correct width of a textBlock in WinForm在 WinForm 中获取文本块的正确宽度
【发布时间】:2019-01-23 11:08:43
【问题描述】:

我有一个 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 应用程序中使用控件时,文本会比其父级大。这意味着该方法无法正常工作。

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

您知道为什么会发生这种情况或我该如何解决吗?

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

这是 WPF:

这是 WinForm:

【问题讨论】:

    标签: wpf winforms label size textblock


    【解决方案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

    【讨论】:

    • 和我的方法有什么不同?
    • 另外不要忘记我使用 WPF 控件。标签不包含 Font 属性。
    • 当我靠近我的电脑时,我将能够与您分享我的改进建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2015-02-20
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    相关资源
    最近更新 更多