无法在windows phone 8.1运行时应用程序中获取TextBlock ActualWidth值
本文关键字:应用程序 获取 TextBlock ActualWidth 运行时 windows phone | 更新日期: 2023-09-27 18:27:43
我正在开发wp8.1运行时应用程序。在加载页面(或用户控件)之前,我需要获取文本块控件的实际宽度。在wp8应用程序中,我可以使用以下代码:
var textBlock = new TextBlock();
textBlock.FontSize = 26;
textBlock.Text = "A";
var width = textBlock.ActualWidth;
但是,在wp8.1运行时应用程序中,上面的代码无法获得实际宽度,并且总是返回0。有人能告诉我如何在wp8.1运行时应用程序中加载页面之前获得文本块的实际宽度吗?
谢谢!
我真的很惊讶它能在WP8.0 SL中工作,所以我做了一个小测试。你说得对,它确实有效。为了让它在WP8.1运行时工作,我会将它添加到一个Container中,然后调用UpdateLayout
,如下所示:
<Grid x:Name="ContentPanel">
<!--- content xaml --->
</Grid>
private void Page_Loaded(object sender, RoutedEventArgs e)
{
TextBlock tb = new TextBlock();
tb.Margin = new Thickness(-2500, -2500, 0, 0); // hide it using margin
tb.FontSize = 26;
tb.Text = "Test Test Test Test";
this.ContentPanel.Children.Add(tb);
tb.UpdateLayout();
var tb_width = tb.ActualWidth;
var tb_height = tb.ActualHeight;
}
我认为在实际加载TextBlock之前无法获得它。
问题是,ActualWidth的默认值是0,默认值是如果尚未在UI中加载或渲染TextBlock,则会得到的值。有关此属性的参考资料和更多详细信息,请访问此处。
您可能能够捕获TextBlock的SizeChanged事件并从中执行某些操作。