WPF - получить размер UIElement в памяти? - PullRequest
7 голосов
/ 03 февраля 2011

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

В настоящее время у меня есть подпрограмма, которая создает Grid из DataTable, а затем добавляет сетку в FixedDocument. Мне нужно знать размер Grid, потому что я хочу автоматически переключаться из Портрета в Пейзаж при необходимости; или даже изменить FontSize сетки.

Ответы [ 2 ]

19 голосов
/ 03 февраля 2011

Вам необходимо принудительно отобразить элемент или дождаться его отображения. Затем вы можете использовать свойства ActualHeight и ActualWidth.

Для принудительного рендеринга:

  MenuItem item = new MenuItem();
  item.Header = "bling";
  item.Icon = someIcon;
  //Force render
  item.Measure(new Size(Double.PositiveInfinity, Double.PositiveInfinity));
  item.Arrange(new Rect(item.DesiredSize));

В этом примере MenuItem не была указана явная высота или ширина. Тем не менее, форсирование рендера приведет к его отображению с учетом предоставленного текста заголовка и значка.

1 голос
/ 03 февраля 2011

Вы можете определить это только при наличии явного набора Width или Height. Даже тогда, в зависимости от сценария, он может измениться во время рендеринга, так как проход Layout не произойдет, пока он не будет отрендерен, и ActualWidth / ActualHeight будет установлено.

...