2011-02-03 81 views
7

有没有办法获得驻留在内存中但尚未渲染的UIElement的大小?WPF - 在内存中获取UIElement的大小?

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

回答

16

您需要强制渲染项目或等待渲染项目。然后您可以使用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

您只能确定这是否有明确的WidthHeight集。即使这样,根据场景,它可能会在渲染时发生变化,因为布局过程在渲染之前不会发生,并且ActualWidth/ActualHeight被设置。

+0

所以我唯一的选择是使用不同的字体大小和页面布局重复呈现控件,直到它适合? – 2011-02-03 18:29:17

+0

@Sonny:或者将它渲染到其他位置......您可以随时使用RenderTargetBitmap等来尝试将其渲染为“屏幕外”,然后进行调整,如果您不想让用户看到它。 .. – 2011-02-03 18:32:44