Silverlight/C# Canvas, его элементы UI и ширина

я создал класс «Компонент», который будет добавлен к дочерним элементам моего холста. После добавления я хочу расположить эти компоненты, например:

comp.setValue(Canvas.LeftProperty, 100d);

который отлично работает. После этого компонент будет добавлен на холст. Теперь моя актуальная проблема состоит в том, чтобы получить фактическую ширину компонентов. Я пробовал такие вещи, как

comp.Width;
comp.ActualWidth;

но они равны 0 или NaN. В моем понимании так и должно быть. Потому что они были добавлены на холст, и должны получить там определенные размеры, или я ошибаюсь?

Также я добавил OnClick-Event на те компоненты, в которых они пишут свою ActualWidth на консоли, и это работает. Но я хочу получить эту информацию сразу после их добавления.

Любые идеи?

Привет и прочее!


person Watte    schedule 24.04.2014    source источник


Ответы (1)


Платформа активирует measure and arrange cycle, когда вы добавляете дочерние элементы в панель, включенную в visual tree. После этого прохода макета вы можете получить размер, задав ActualWidth и ActualHeight. По-видимому, цикл не завершен (или еще не запущен), когда ваш код запускается. Так что ты можешь сделать? Вы можете зарегистрировать обработчик событий для события FrameworkElement.SizeChanged и запустить свой код внутри обработчика событий.

person Martin    schedule 24.04.2014