有没有办法获得驻留在内存中但尚未渲染的UIElement
的大小?WPF - 在内存中获取UIElement的大小?
我目前有一个例程,从DataTable
创建Grid
,然后将网格添加到FixedDocument
。我需要知道Grid
的大小,因为如果需要,我想自动从纵向切换到横向;甚至更改网格的FontSize
。
有没有办法获得驻留在内存中但尚未渲染的UIElement
的大小?WPF - 在内存中获取UIElement的大小?
我目前有一个例程,从DataTable
创建Grid
,然后将网格添加到FixedDocument
。我需要知道Grid
的大小,因为如果需要,我想自动从纵向切换到横向;甚至更改网格的FontSize
。
您需要强制渲染项目或等待渲染项目。然后您可以使用ActualHeight
和ActualWidth
属性。
要强制渲染:
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
没有得到明确的高度或宽度。但是,强制渲染将使其将考虑提供的标题文本和图标。
您只能确定这是否有明确的Width
或Height
集。即使这样,根据场景,它可能会在渲染时发生变化,因为布局过程在渲染之前不会发生,并且ActualWidth
/ActualHeight
被设置。
所以我唯一的选择是使用不同的字体大小和页面布局重复呈现控件,直到它适合? – 2011-02-03 18:29:17
@Sonny:或者将它渲染到其他位置......您可以随时使用RenderTargetBitmap等来尝试将其渲染为“屏幕外”,然后进行调整,如果您不想让用户看到它。 .. – 2011-02-03 18:32:44