MeasureOverrrideがどのように機能するかは理解できたと思いますが、非常に単純なケースで使用しようとしていますが、機能しません...だから今はよくわかりません... Measureoverrideを使用した後、Arrageoverrideを使用する必要がありますかあまりにもまたはシステムは私のためにそれを行いますか?状況は次のとおりです。Panelから継承されたLinearLayoutクラスがあり、wrapwidhtとwrapheighという2つのフィールドがあります。これらがtrueの場合、LinearLayoutの幅または高さは子が必要とするものでなければなりません。したがって、私のMeasureoverideは次のようになります。
protected override Size MeasureOverride(Size availableSize) {
Size panelDesiredSize = new Size();
if ((this.widthWrap) || (this.heightWrap))
{
foreach (UIElement elemento in this.Children)
{
System.Diagnostics.Debug.WriteLine(((FrameworkElement)elemento).DesiredSize.ToString());
if (this.Orientation.Equals(System.Windows.Controls.Orientation.Vertical))
{
if (this.widthWrap)
{
//the widest element will determine containers width
if (panelDesiredSize.Width < ((FrameworkElement)elemento).Width)
panelDesiredSize.Width = ((FrameworkElement)elemento).Width;
}
//the height of the Layout is determine by the sum of all the elment that it cointains
if (this.heightWrap)
panelDesiredSize.Height += ((FrameworkElement)elemento).Height;
}
else
{
if (this.heightWrap)
{
//The highest will determine the height of the Layout
if (panelDesiredSize.Height < ((FrameworkElement)elemento).Height)
panelDesiredSize.Height = ((FrameworkElement)elemento).Height;
}
//The width of the container is the sum of all the elements widths
if (this.widthWrap)
panelDesiredSize.Width += ((FrameworkElement)elemento).Width;
}
}
}
System.Diagnostics.Debug.WriteLine("desiredsizzeeeeeee" + panelDesiredSize);
return panelDesiredSize;
}
LinerLayoutに準拠している子は3つのボタンですが、何も描画されません。たとえ、panelDesiredSizeが正しくても、それがどのように機能するのか理解できなかったのかもしれません。誰かが私を助けることができればとてもいいでしょう:-)