繁体   English   中英

Windows Phone 8.1运行时应用程序无法获取TextBlock ActualWidth值

[英]cannot get TextBlock ActualWidth value in windows phone 8.1 runtime app

我正在开发wp8.1运行时应用程序,我需要获取文本块控件的实际宽度才能在加载页面(或用户控件)之前执行某些操作。 在wp8应用中,我可以使用以下代码执行此操作:

 var textBlock = new TextBlock();
 textBlock.FontSize = 26;
 textBlock.Text = "A";
 var width = textBlock.ActualWidth;

但是,在wp8.1运行时应用程序中,以上代码无法获取实际宽度,并且始终返回0。有人可以告诉我如何在将页面加载到wp8.1运行时应用程序中之前获取textblock实际宽度吗?

谢谢!

我真的很惊讶它可以在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事件,然后从那里进行一些操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM