【问题标题】:cannot get TextBlock ActualWidth value in windows phone 8.1 runtime app无法在 windows phone 8.1 运行时应用程序中获取 TextBlock ActualWidth 值
【发布时间】:2014-10-23 11:28:30
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: c# xaml windows-phone-8 windows-phone-8.1


    【解决方案1】:

    我真的很惊讶它在 WP8.0 SL 中工作,所以我做了一个小测试。你是对的,它确实有效。为了让它在 WP8.1 运行时中工作,我会将它添加到容器中,然后调用 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;
    }
    

    【讨论】:

      【解决方案2】:

      我认为您无法在实际加载 TextBlock 之前获得它。

      实际情况是,ActualWidth 的默认值为 0,如果 TextBlock 尚未在 UI 中加载或呈现,则默认值为您将获得的值。关于此属性的参考和更多详细信息可以是found here

      您可能能够捕获 TextBlock 的 SizeChanged 事件并从那里做一些事情。

      【讨论】:

      • 但我可以在 windows phone 8 silverlight 应用程序中获取值...此控件在 RT 中已更改?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多