如何知道包装的文本框的高度?

时间:2019-03-30 09:14:17

标签: wpf

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

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

double myHeight = myView.MyTextBox.Actualheight;

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

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

谢谢。

编辑:我已经意识到大小取决于字体的大小。起初我设置为8,但如果我设置为16,则实际高度也是两倍。因此,似乎textBox的高度取决于字体大小,并且无法说明是否已换行。

1 个答案:

答案 0 :(得分:1)

在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>

enter image description here

UpdateLayout实际上并不会导致呈现任何东西,它只是准备它。因此,直到您使用myView.Show()或类似的东西渲染视图或窗口,文本框才会被渲染,因此ActualHeight的值不会被计算出来。