3

カスタムパネルで「ホスト」されているカスタムコントロールがあります(両方とも私のものです)。

私のカスタム パネルには次のようなコードがあります。

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 だけを設定することはできません。)

4

1 に答える 1

0

カスタム コントロールの MeasureOverride が正しいサイズを返すが、それが DesiredSize プロパティに反映されない場合、私は 1 つの提案しかありません。子要素は何らかのコンテナでラップされています。カスタム パネルの MeasureOverride プロシージャ内で子要素のタイプを確認できます。

于 2015-01-12T16:20:39.447 に答える