Определение размера UIElement в Silverlight

У меня есть StackPanel, содержащий ряд элементов UIElements (которые были созданы с использованием шаблона из файла XAML), которые я хочу отобразить.

Чтобы отобразить его правильно, мне нужно знать его размер.

Первоначально все Width/Height/ActualWidth/ActualHeight/DesiredSize равны 0 или NaN. Если я вызываю panel.Measure (new Size (double.PositiveInfinity, double.PositiveInfinity)), то вычисляются его ActualWidth / ActualHeight / DesiredSize (ширина / высота остаются как NaN). Все идет нормально.

Однако для ActualWidth / DesiredSize.Width установлено значение MinWidth, указанное в шаблоне XAML, даже если при отрисовке панель стека шире, чем это.

Почему отображаемый размер не соответствует свойствам ActualWidth / ActualHeight?

Как я могу определить, какой будет размер отрисовки, чтобы я мог правильно расположить свою панель?

(панель предназначена для всплывающей подсказки, которая должна появляться рядом с указателем мыши, но ее положение требует корректировки, если всплывающая подсказка выйдет за пределы разрешенной области).


person Dave W    schedule 17.02.2011    source источник
comment
Когда вы читаете значение? Его ДОЛЖНО быть прочитано после срабатывания события SizeChanged, см. Документацию MSDN msdn.microsoft.com/en-us/library/   -  person R4cOOn    schedule 17.02.2011
comment
Я читал его после ручного вызова UpdateLayout (), который заполнял ActualHeight / Width и DesiredSzie. Однако, хотя у них были значения, у них не было окончательных значений. Это решило прослушивание события SizeChanged. Спасибо.   -  person Dave W    schedule 18.02.2011


Ответы (1)


Вы можете прослушивать SizeChanged событие элемента управления, чтобы отслеживать изменения его размера. Пока элемент управления не визуализирован, все свойства размера будут 0/NaN.

person decyclone    schedule 17.02.2011
comment
Отлично, спасибо. Это помогло. Я новичок в Silverlight и пропустил эту тонкость при чтении документации MSDN. - person Dave W; 18.02.2011