You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中测量TextBox返回零尺寸:如何不显示获取其高度?

WPF TextBox 未显示时获取高度的问题

问题场景

尝试通过Measure方法计算TextBox高度时,返回的DesiredSize高度为0,但同样的代码对TextBlock有效:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        var block = new TextBlock();
        block.Measure(new Size(100, 100));
        Console.WriteLine(block.DesiredSize); // {0,15.96} 正常返回高度

        var box = new TextBox();
        box.Measure(new Size(100, 100));
        Console.WriteLine(box.DesiredSize); // {0,0} 高度为0,原因是什么?
    }
}

原因分析

TextBox的高度计算依赖其内部模板控件(如ScrollViewer、文本宿主)的布局,当TextBox未添加到可视化树且未手动应用模板时,这些内部控件尚未初始化,导致Measure无法正确计算所需尺寸。此外,空TextBox的默认布局逻辑可能不会触发高度计算。

解决方案

无需实际显示TextBox即可获取正确高度,可采用以下方法:

  • 方法1:手动应用模板
    调用ApplyTemplate()强制加载TextBox的模板,确保内部控件初始化后再执行Measure:

    var box = new TextBox();
    box.ApplyTemplate(); // 手动触发模板加载
    box.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); // 让控件计算自身所需最大高度
    Console.WriteLine(box.DesiredSize); // 正常返回默认高度
    
  • 方法2:设置文本内容
    给TextBox设置至少一个字符(比如空格),触发内部布局逻辑:

    var box = new TextBox();
    box.Text = " "; // 用空字符触发布局计算
    box.Measure(new Size(100, double.PositiveInfinity));
    Console.WriteLine(box.DesiredSize); // 返回正确高度
    
  • 方法3:读取默认属性值
    如果只需要默认高度参考,可直接读取TextBox的MinHeight属性:

    var box = new TextBox();
    Console.WriteLine(box.MinHeight); // 获取控件默认最小高度
    

内容的提问来源于stack exchange,提问作者tpol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:32:07