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.