首页 > 解决方案 > 如何知道包装文本框的高度?

问题描述

我需要知道包装文本框的高度。我正在使用这段代码:

MyView myView = new MyView();
myView.MyTextBox.Text = "my large text";
myView.UpdateLayout();

double myHeight = myView.MyTextBox.Actualheight;

无论文本有多大,我总是得到 12.96 作为实际高度。

如果我对要添加新项目的数据网格执行相同的操作,我会得到正确的高度,所以我想知道有时包装的文本框是否有其他行为。

谢谢。

编辑:我已经意识到大小取决于字体的大小。一开始我设置了8,但是如果我设置了16,实际高度也是两倍。所以似乎textBox的高度取决于字体大小,并且它没有考虑是否被包裹。

标签: wpf

解决方案


在 XAML 中运行一个简单的测试,当文本换行时,它会导致文本框ActualHeight按预期增加,如下图所示。

<StackPanel Orientation="Horizontal">
    <TextBox Width="100" HorizontalAlignment="Left" Margin="10"
            FontSize="10" Name="tbx1"
            TextWrapping="Wrap" Text="Some short text"/>
    <TextBlock Foreground="White" VerticalAlignment="Center"
            FontSize="20"
            Text="{Binding ActualHeight, ElementName=tbx1, Mode=OneWay}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
    <TextBox Width="100" HorizontalAlignment="Left" Margin="10"
            FontSize="10" Name="tbx2"
            TextWrapping="Wrap" Text="Some text that is longer"/>
    <TextBlock Foreground="White" VerticalAlignment="Center"
            FontSize="20"
            Text="{Binding ActualHeight, ElementName=tbx2, Mode=OneWay}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
    <TextBox Width="100" HorizontalAlignment="Left" Margin="10"
            FontSize="15" Name="tbx3"
            TextWrapping="Wrap" Text="Short text"/>
    <TextBlock Foreground="White" VerticalAlignment="Center"
            FontSize="20"
            Text="{Binding ActualHeight, ElementName=tbx3, Mode=OneWay}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
    <TextBox Width="100" HorizontalAlignment="Left" Margin="10"
            FontSize="15" Name="tbx4"
            TextWrapping="Wrap" Text="Some text that is longer"/>
    <TextBlock Foreground="White" VerticalAlignment="Center"
            FontSize="20"
            Text="{Binding ActualHeight, ElementName=tbx4, Mode=OneWay}" />
</StackPanel>

在此处输入图像描述

UpdateLayout实际上并没有导致任何东西被渲染,它只是准备它。因此,在您使用myView.Show()或等效的东西渲染视图或窗口之前,文本框不会被渲染,因此ActualHeight不会计算该值。


推荐阅读