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

Wpf 如何知道包装文本框的高度?,wpf,Wpf,我需要知道包装好的文本框的高度。我正在使用以下代码: MyView myView = new MyView(); myView.MyTextBox.Text = "my large text"; myView.UpdateLayout(); double myHeight = myView.MyTextBox.Actualheight; 不管文本有多大,我总是得到12.96的实际高度 如果我对添加新项的datagrid也这样做,那么我得到了正确的高度,因此我想知道有时包装的文本框是否有其他行

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

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

double myHeight = myView.MyTextBox.Actualheight;
不管文本有多大,我总是得到12.96的实际高度

如果我对添加新项的datagrid也这样做,那么我得到了正确的高度,因此我想知道有时包装的文本框是否有其他行为

谢谢


编辑:我意识到大小取决于字体的大小。起初我设定为8,但如果我设定为16,实际高度也是双倍的。因此,文本框的高度似乎取决于字体大小,并且它没有考虑它是否被包装。

在XAML中运行一个简单的测试,当文本包装时,它会导致文本框的实际高度按预期增加,如下图所示

<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