我在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。 感谢。
答案 0 :(得分:3)
在添加之前,请先调用Measure,然后使用DesiredSize。
编辑:这样做是可以的,因为Canvas一旦放置就不会影响元素的大小。如果你将它添加到具有固定大小行的网格中,那么一旦添加它就不会给你真正的高度,因为添加到网格会改变它。
正如Mario Vernari指出的那样,如果你有真正复杂的定位需求,那么很容易覆盖ArrangeOverride(有时是MeasureOverride)并制作一个自定义面板。 Canvas实际上是用这种方式编写的,就像StackPanel一样。它们都只是特定的测量和排列面板,你也可以制作自己的面板。