カスタムパネルで「ホスト」されているカスタムコントロールがあります(両方とも私のものです)。
私のカスタム パネルには次のようなコードがあります。
protected override Size MeasureOverride(Size availableSize)
{
foreach (UIElement child in Children)
{
child.Measure(availableSize);
// Do stuff with the Desired Size. (This is an example)
resultSize.Width += child.DesiredSize.Width;
resultSize.Height = Math.Max(resultSize.Height, child.DesiredSize.Height);
}
//.. Other Measure Stuff
}
パネルに配置したすべての標準コントロールは正常に機能します。しかし、私のカスタム コントロールはDesiredSize
非常に小さい幅 (5 ピクセル) に設定されています。Label
少なくとも 40 ピクセルを表示できるようにする必要があります。
そこで、このコードをカスタム コントロールに入れました。
protected override Size MeasureOverride(Size constraint)
{
var baseSize = base.MeasureOverride(constraint);
var labelTextWidth = GetStringWidth(label.Content.ToString(), label);
if (baseSize.Width == 0)
baseSize.Width = 100;
if (baseSize.Width < labelTextWidth)
baseSize.Width = labelTextWidth;
return baseSize;
}
Size
これは正しいa を返します。しかし、私の Panel の MeasureOverride では、child.DesiredSize は、子コントロールの MeasureOverride から返されたものを反映していません。
なぜそれがそれをするのでしょうか?そして、計算された Measure を DesiredSize でパネルに正しく渡すにはどうすればよいですか? (DesiredSize だけを設定することはできません。)