WPF - Get size of UIElement in Memory?

2019-01-19 01:22发布

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.

2条回答
劳资没心,怎么记你
2楼-- · 2019-01-19 01:27

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.

查看更多
时光不老,我们不散
3楼-- · 2019-01-19 01:44

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.

查看更多
登录 后发表回答