WPF - 在内存中获取UIElement的大小?

时间:2011-02-03 18:17:51

标签: wpf wpf-controls size uielement

有没有办法获得驻留在内存中但尚未呈现的UIElement的大小?

我目前有一个例程,可以从Grid创建DataTable,然后将网格添加到FixedDocument。我需要知道Grid的大小,因为如果需要,我想自动从肖像切换到横向;甚至更改网格的FontSize

2 个答案:

答案 0 :(得分:19)

您需要强制渲染项目,或等待渲染项目。然后,您可以使用ActualHeightActualWidth属性。

强制渲染:

  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 :(得分:1)

如果有明确的WidthHeight设置,您只能确定这一点。即使这样,根据场景,它可能会在渲染时更改,因为布局传递在渲染之前不会发生,并且ActualWidth / ActualHeight会被设置。