Получить высоту и ширину UIElement?

В настоящее время я создаю класс, который наследуется от класса Popup.

Наконец, он будет использоваться для отображения пользователю всплывающего окна с правилами проверки при редактировании, например, TextBox.

Поэтому я создал ValidationPopup с этим конструктором:

public ValidationPopup(UIElement parent, double width) : base()
{
   this.parent = parent;
   this.width = width;
   InitControl();
}

Я хотел бы установить размер всплывающего окна равным размеру родителя PlacementTarget. Чтобы позволить многим различным элементам управления иметь один из этих ValidationPopups, я передаю UIElement в качестве родителя вместо TextBox и т. д. Моя проблема в том, что мне нужно передать значения ширины и высоты этого элемента управления при создании экземпляра ValidationPopup в для того, чтобы размер его правильно.

Можно ли получить эти значения от UIElement? Я видел RenderSize в MSDN, но он дает мне только значения 0,0 для ширины и высоты.

Здесь я устанавливаю один экземпляр ValidationPopup:

txtOperator = new TextBox();
layoutGrid.Children.Add(txtOperator);
operatorVPU = new ValidationPopup(txtOperator, txtOperator.Width);

Я пытался использовать RenderSize, но это не работает, пока весь пользовательский интерфейс не будет полностью завершен.

Есть ли способ получить значения высоты и ширины UIElement на данный момент? Возможно, есть другие, еще лучшие способы достижения того же результата?


person TorbenJ    schedule 20.10.2012    source источник


Ответы (1)


Похоже, вам нужно использовать свойства ActualWidth/Height. Если они по-прежнему равны 0 или NaN, вы можете попробовать выполнить этот код на более позднем этапе создания представления.

person Chen Kinnrot    schedule 20.10.2012
comment
На самом деле свойства AcutalHeight/Width нет, но при поиске я нашел свойство Width и Height для FrameworkElement, которое подчинено UIElement и может использоваться вместо UIElement, но с тем же результатом :) - person TorbenJ; 20.10.2012
comment
Хм, ладно, свойство Height FrameworkElement также имеет значение NaN. Вы правы со своим предложением. Теперь я использую ActualHeight. - person TorbenJ; 20.10.2012