WPF - Get size of UIElement in Memory?
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.
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.
You can only determine this if there is an explicit Width
or Height
set. Even then, depending on the scenario, it may change at render time, since the Layout pass will not occur until it's rendered, and ActualWidth
/ActualHeight
get set.
精彩评论