wpf - 如何知道包装文本框的高度?
问题描述
我需要知道包装文本框的高度。我正在使用这段代码:
MyView myView = new MyView();
myView.MyTextBox.Text = "my large text";
myView.UpdateLayout();
double myHeight = myView.MyTextBox.Actualheight;
无论文本有多大,我总是得到 12.96 作为实际高度。
如果我对要添加新项目的数据网格执行相同的操作,我会得到正确的高度,所以我想知道有时包装的文本框是否有其他行为。
谢谢。
编辑:我已经意识到大小取决于字体的大小。一开始我设置了8,但是如果我设置了16,实际高度也是两倍。所以似乎textBox的高度取决于字体大小,并且它没有考虑是否被包裹。
解决方案
在 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
不会计算该值。
推荐阅读
- asp.net-mvc - 如何在asp.net核心的一个解决方案中定义的2个项目中定义(控制器/方法)的路由?
- javascript - 在 localStorage 中存储用户 API 密钥的最佳实践
- android - 如何在下面的 android webview api 19 中使用 chrome DevTools?
- ionic-framework - Ionic 3 如何修复离子幻灯片的第一张幻灯片,其中应该显示规格和用户在报价之间滑动以进行比较?
- javascript - Javascript ES6 - 是否可以在子类中不使用 this 关键字的情况下使用/调用超类属性或函数
- xamarin - 使用 Xamarin.Forms MessagingCenter 在 ViewModel 和方法之间进行通信有什么优点或缺点吗
- html - 什么时候需要为语义添加类?
- msal - 是否可以使用从 MSAL(MS 身份平台)收到的 JWT Bearer 来访问 MS AppCenter API?
- spring-boot - 如何在 Wildfly14 上配置 JavaMailSender
- python - glob 多个 CSV 和 np.arange