0

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が正しくても、それがどのように機能するのか理解できなかったのかもしれません。誰かが私を助けることができればとてもいいでしょう:-)

4

3 に答える 3

2

あなたと同様の以前の投稿で私の答えを確認してください:WPFとSilverlightの2パスレイアウトシステム

答えは、いいえ、 ArrangeOverrideをオーバーライドする必要はないということですが、ArrangeOverrideを使用しない場合、MeasureOverrideを使用する意味は何ですか?

于 2011-04-14T12:37:14.023 に答える
0

子に対してMeasureメソッドを呼び出す必要があります。ここの例を参照してください:http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.measureoverride.aspx

于 2011-04-14T12:35:31.227 に答える
0

「elemento」でMeasureを呼び出す必要があります。実際に測定して目的のサイズを作成するために必要になるため、Silverlightがelementoのテンプレートで宣言されたUI要素を作成するのは測定中です。次に、elemento.DesiredSize.WidthとHeightを使用して、panelDesiredSizeに必要なサイズを作成する必要があります。

于 2017-04-14T07:30:09.493 に答える