カスタムパネルを持つカスタムコントロールに取り組んでおり、カスタムパネル内には、サイズを子メソッドMeasureOverride
に渡す小さくて単純なメソッドがあります。カスタム パネルがレイアウトを処理し、ウィンドウ サイズに応じて子を大きくまたは小さくする必要があります。double.PositiveInfinity
MeasureOverride
コントロールを扱ったことがある場合は、wpf レイアウト システムの仕組みと、基本的にすべての子が子の子の MeasureOverride を呼び出す MeasureOverride などを呼び出すことを知っておく必要があります。
ここでの問題は、ウィンドウのサイズを変更すると、カスタムパネルが再度測定を行うためのフラグを受け取るため、再度MeasureOverride
呼び出されることですが、今回はdouble.PositiveInfitinty
サイズを子に渡すときに、子MeasureOverride
がまったく呼び出されないことです。 (ただし、メソッドは WPF レイアウト システムの定義に従って呼び出す必要があります)。どうしてこんなことに?MeasureOverride
親に電話すると、子供たちも対策を迫られるのではないかといつも思っていました。
明らかに私は間違っているので、誰かがコントロール/子供がいつ再測定するかをどのように知っているか説明してもらえますか?
ちなみに、私はdouble.PositiveInfinity
子供たちに のサイズを渡して、必要なだけスペースを取るように伝えています。
コード:
protected override Size MeasureOverride(Size availableSize)
{
double x;
double y;
var children = this.InternalChildren;
for (int i = 0; i < children.Count; i++)
{
UIElement child = children[i];
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity);
y += child.DesiredSize.Height;
x = Math.Max(x, child.DesiredSize.Width);
}
return new Size(x, y);
}
コードは簡単です。子供たちが再び測定されない理由がわかりません。コードでスペルミスがあった場合は申し訳ありません。