我在 Canvas 上创建文本框,如下所示:
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 的宽度,因为左坐标取决于此。 我可以做吗?实际宽度为 0。 谢谢。
最佳答案
在添加之前,对其调用 Measure,然后使用 DesiredSize。
编辑:这样做是可以的,因为 Canvas 不会影响放置后的元素的大小。如果您将其添加到具有固定大小行的网格,则添加后不会为您提供真实的高度,因为添加到网格会更改它。
正如 Mario Vernari 指出的那样,如果您有真正复杂的定位需求,则可以很容易地覆盖 ArrangeOverride(有时是 MeasureOverride)并制作自定义面板。 Canvas其实就是这样写的,StackPanel等也是这样写的,都是一些具体的测量和排列面板,你也可以自己制作。
关于c# - 创建TextBlock时我可以知道它的宽度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6778918/