Могу ли я узнать ширину TextBlock при его создании? - PullRequest
2 голосов
/ 21 июля 2011

Я создаю 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, потому что от этого зависит левая координата. Могу ли я это сделать? ActualWidth равен 0. Спасибо.

1 Ответ

3 голосов
/ 21 июля 2011

Прежде чем добавить его, вызовите Measure для него, затем используйте DesiredSize.

Edit: Это нормально, поскольку Canvas не влияет на размер элемента после его размещения.Если вы добавите его, скажем, в Grid со строкой фиксированного размера, это не даст вам реальную высоту после добавления, поскольку добавление в Grid изменит ее.

Как указывает Марио Вернари,если у вас есть действительно сложные потребности позиционирования, довольно легко переопределить ArrangeOverride (и иногда MeasureOverride) и создать собственную панель.Canvas на самом деле написан таким же образом, как и StackPanel и т. Д. Все они представляют собой просто панели с определенными размерами и компоновкой, и вы тоже можете создавать свои собственные.

...