2011-02-03 7 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は、明示的な高さまたは幅を与えられていません。ただし、レンダリングを強制すると、提供されたヘッダーテキストとアイコンを考慮して描画されます。

+0

'MenuItem'は私のためには機能しませんでしたが、' StackPanel'や 'Viewbox'はしました。 – vossad01

+0

クラス 'UIElement'に 'ActualWidth'というプロパティはありません:-( – Boris

+0

はい、これは私のために働いていました。これは私のために働いていました..... –

1

明示的にWidthまたはHeightが設定されている場合にのみ、これを判断できます。それでも、シナリオによっては、レイアウトパスがレンダリングされるまで発生せず、ActualWidth/ActualHeightが設定されるため、レンダリング時に変更されることがあります。

+0

私の唯一の選択肢は、異なるフォントサイズとページレイアウトを使用してコントロールが収まるまで繰り返しコントロールをレンダリングすることです。 –

+0

@ソニー:それを他の場所にレンダリングする... RenderTargetBitmapなどを使って "スクリーンから外し"てレンダリングしようとすると、ユーザーに見せたくない場合は調整することができます。 .. –

関連する問題