c# - 创建TextBlock时我可以知道它的宽度吗?

标签 c# .net wpf width textblock

我在 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/

相关文章:

.net - 这个匿名类型具体类型是什么?

复合控件中的 WPF TabIndex

c# - 如何从 WCF 服务流下载文件?

c# - 取消数据网格单元格值更改时的下一个单元格选择

c# - 如何在异常中打印完整的堆栈跟踪?

.net - 访问 Windows OpenSSH SFTP 服务器上的文件时出现错误 "Bad message"

c# - 长异步等待链会导致大量内存消耗吗? (理论上)

wpf - 如何禁止选择列表框中的项目?

c# - 如何计算 WPF 数据网格中存在的项目并将其显示在另一个页面中?

c# - 从 WSDL 创建类 'back'