4

XAML/C# でいくつかのレイアウトに取り組んでいますが、特定の理由でSizeToContent="Width"オプションを使用できませんが、特定の状況でそれをシミュレートしたいと考えています。エキスパンダー内にユーザー コントロールが配置されており、そのユーザー コントロールの ActualWidth を取得して、エキスパンダーが展開されたときに GridColumn とウィンドウのサイズをそれに応じて大きくできるようにしたいと考えています。Expander はIsExpanded="False"、ActualWidth プロパティが 0.0 として読み取られると開始されるためです。ユーザー コントロールの ActualWidth が完全に表示SizeToContent="Width"され、有効であるかのように取得する方法はありますか?

実際の値をハードコーディングせずにこの幅を計算する方法を必死に見つけようとしています。DesiredSize.WidthまたRenderedSize.Width、エキスパンダーが折りたたまれている場合は両方とも 0.0 を返します

4

1 に答える 1

2

Measure &Arrange passを実行し、infinite を渡すとSize、 . を取得できると思いますDesiredSize

var infiniteSize = new Size(double.PositiveInfinity, double.PositiveInfinity);
control.Measure(infiniteSize);

control.Arrange(new Rect(infiniteSize));

修正:

Measure()コメントで述べたように、無限で呼び出すだけでSizeうまくいきます。使用しないでくださいArrange()

于 2013-05-03T15:25:33.070 に答える