无法在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运行时应用程序中加载页面之前获得文本块的实际宽度吗?

谢谢!

无法在windows phone 8.1运行时应用程序中获取TextBlock ActualWidth值

我真的很惊讶它能在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事件并从中执行某些操作。