我需要知道包装的文本框的高度。我正在使用此代码:
MyView myView = new MyView();
myView.MyTextBox.Text = "my large text";
myView.UpdateLayout();
double myHeight = myView.MyTextBox.Actualheight;
无论文本多大,我总是得到12.96作为实际高度。
如果我对添加新项的数据网格执行相同操作,则我得到的高度正确,因此我想知道有时包装的文本框是否还有其他行为。
谢谢。
编辑:我已经意识到大小取决于字体的大小。起初我设置为8,但如果我设置为16,则实际高度也是两倍。因此,似乎textBox的高度取决于字体大小,并且无法说明是否已换行。
答案 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>
UpdateLayout
实际上并不会导致呈现任何东西,它只是准备它。因此,直到您使用myView.Show()
或类似的东西渲染视图或窗口,文本框才会被渲染,因此ActualHeight
的值不会被计算出来。