WPF - Get size of UIElement in Memory?

size, uielement, wpf, wpf-controls

Solution

You need to force a render of the item, or wait for the item to be rendered. You can then use the `ActualHeight` and `ActualWidth` properties.

To force a render:

  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));

In this example the `MenuItem` has not been given an explicit height or width. However, forcing the render will render it taking the supplied header text and icon into consideration.

Problem

Is there a way to get the size of a `UIElement` that resides in memory and has not yet been rendered? I currently have a routine that creates a `Grid` from a `DataTable` and then adds the Grid into a `FixedDocument`. I need to know the size of the `Grid` because I want to automatically switch from Portrait to Landscape if needed; or even change the `FontSize` of the grid.

Original source