C# 创建文本块时我可以知道它的宽度吗?
我在画布上创建文本框,如下所示:C# 创建文本块时我可以知道它的宽度吗?,c#,.net,wpf,width,textblock,C#,.net,Wpf,Width,Textblock,我在画布上创建文本框,如下所示: TextBlock t = new TextBlock(); t.Foreground = new SolidColorBrush(...); t.FontSize = 10; t.HorizontalAlignment = HorizontalAlignment.Left; t.VerticalAlignment = VerticalAlignment.Top; t
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);
我想知道这个文本块的宽度,因为左坐标取决于这个。
我能做吗?实际宽度为0。
谢谢。在添加之前,请先对其进行测量,然后使用所需的尺寸 编辑:这是可以的,因为画布放置后不会影响元素的大小。如果将其添加到(例如)具有固定大小行的栅格中,则在添加后不会给出实际高度,因为添加到栅格会改变它
正如Mario Vernari所指出的,如果您有真正复杂的定位需求,可以很容易地覆盖ArrangeOverride(有时是MeasureOverride)并创建自定义面板。画布实际上是这样写的,StackPanel等也是这样。它们都只是特定的测量和排列面板,您也可以自己制作。我以为WPF中没有“宽度”。您必须使用边距/填充来确定它在容器中的适合程度。你说左坐标取决于它是什么意思?你想做什么?@musefan这里有宽度和高度属性以及实际宽度和实际高度。但是,在将元素附加到可视化树之前调用度量值不是一个好的做法。@Mario,在某些情况下确实是这样,但是当添加到画布时,可视化树不会对大小产生影响,您可以安全地传递+infinity、+infinity的大小进行度量。我知道。当你的控制者也没有孩子时,你可以这样做,但我不鼓励这种做法。相反,我更喜欢从画布(或面板)派生自己的控件,然后编写自定义定位系统。更加优雅。。。