2

組み込みの StackPanel に似たパネルを作成しました。わずかな問題を除いて、ほとんど問題なく動作します。

子のレイアウト プロパティを変更しても、常にパネルの MeasureOverride と ArrangeOverride が呼び出されるとは限りません。子の Visibility プロパティが変更された場合は常に呼び出されますが、Width プロパティと Height プロパティが変更された場合は呼び出されません。

StackOverflow の質問に含めるのに十分なほど小さいサンプルでこの動作を再現することはまだできていません。 .

私の質問: サイズ関連のプロパティを変更するときに、要素がその親の測定値を無効にしないのはどのような状況ですか?

この wpf にもタグを付けて (私は Silverlight を使用しました)、より多くのユーザーを対象としています。これは、両方の xaml 実装に等しく適用されると思います。

4

2 に答える 2

1

私は自分の間違いと、サイズ関連のプロパティの特定の変更でパネルの MeasureOverride が呼び出されなくなった条件を突き止めました。

私のパネルは、パネルのサイズではなく、子供が持つべき正確なサイズで子供の測定を呼び出しました。

パネルは、最後の Measure 呼び出しで利用可能であると伝えられたよりも多くのスペースを子供たちが要求し始めたときに呼び出される MeasureOverride メソッドを取得しません。これは理にかなっています。

概要: 子で呼び出す Measure メソッドのパラメーターは、Measure が呼び出される 1 つのパネルだけでなく、親パネルがすべての子に割り当てるスペースを示す必要があります。

于 2014-01-02T13:41:50.283 に答える
-1

基本メソッド MeasureOverride を必ず呼び出す必要があります。

    protected override Size MeasureOverride(Size availableSize)
    {
        // you must call this
        var throwaway = base.MeasureOverride(availableSize);

        // your code here

        return yourNewSize;
    }
于 2013-12-25T08:58:30.590 に答える