2017-07-11 7 views
0

クラスを作成し、それをクラスパネルから継承してコンテンツを追加しましたが、何らかの理由でウィンドウがコンテンツの数をカウントせず、ウィンドウの高さと幅がゼロに設定されています。 ウィンドウのサイズは自動的に設定されます。カスタムパネルWPF

SizeToContent = "WidthAndHeight" 

単純なグリッドを使用するとすべて問題ありません。 私のクラスは

public class Field : Panel 
    { 
     static Field() 
     { 

     } 

     protected override Size MeasureOverride(Size availableSize) 
     { 
      Size size = new Size(double.PositiveInfinity, double.PositiveInfinity); 
      foreach (UIElement element in base.InternalChildren) 
       element.Measure(size); 
      return new Size(); 
     } 

     protected override Size ArrangeOverride(Size arrangeSize) 
     { 
      foreach (UIElement element in InternalChildren) 
      { 
       Rect bounds = new Rect(new Point(0,0), element.DesiredSize); 
       element.Arrange(bounds); 
      } 
      return arrangeSize; 
     } 
     public void CreateField(Field element) 
     { 
      element.Children.Add(new Cell()); 
     } 
    } 

お願いします!

+1

MeasureOverride()では新しいSize()が返されますが、意味がありません。 –

答えて

0

SizeToContentをサポートするために、MeasureOverrideメソッドは、レイアウト後にPanelの最終的に望ましいサイズを返します。あなたの例では、これは子供の最大の幅と高さです。

protected override Size MeasureOverride(Size availableSize) 
{ 
    var measuredSize = new Size(); 

    foreach (UIElement element in InternalChildren) 
    { 
     element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); 

     var elementSize = element.DesiredSize; 

     measuredSize.Width = Math.Max(measuredSize.Width, elementSize.Width); 
     measuredSize.Height = Math.Max(measuredSize.Height, elementSize.Height); 
    } 

    return measuredSize; 
} 
関連する問題