创建TextBlock时我能知道它的宽度吗?

时间:2011-07-21 15:49:19

标签: c# .net wpf width textblock

我在Canvas上创建TextBox,如下所示:

        TextBlock t = new TextBlock();
        t.Foreground = new SolidColorBrush(...);
        t.FontSize = 10;
        t.HorizontalAlignment = HorizontalAlignment.Left;
        t.VerticalAlignment = VerticalAlignment.Top;
        t.Text = ...;

        Canvas.SetLeft(t, "f(width)");
        Canvas.SetTop(t, ...);                

        canvas.Children.Add(t);

我想知道这个TextBlock的宽度,因为Left坐标依赖于此。 我可以做吗? ActualWidth为0。 感谢。

1 个答案:

答案 0 :(得分:3)

在添加之前,请先调用Measure,然后使用DesiredSize。

编辑:这样做是可以的,因为Canvas一旦放置就不会影响元素的大小。如果你将它添加到具有固定大小行的网格中,那么一旦添加它就不会给你真正的高度,因为添加到网格会改变它。

正如Mario Vernari指出的那样,如果你有真正复杂的定位需求,那么很容易覆盖ArrangeOverride(有时是MeasureOverride)并制作一个自定义面板。 Canvas实际上是用这种方式编写的,就像StackPanel一样。它们都只是特定的测量和排列面板,你也可以制作自己的面板。