Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建文本块时我可以知道它的宽度吗?_C#_.net_Wpf_Width_Textblock - Fatal编程技术网

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的大小进行度量。我知道。当你的控制者也没有孩子时,你可以这样做,但我不鼓励这种做法。相反,我更喜欢从画布(或面板)派生自己的控件,然后编写自定义定位系统。更加优雅。。。