子要素はより多くのスペースを求めます。それが親要素によって尊重されるかどうかは、親要素までです。
MeasureCoreは、this
のMeasureOverrideのみを呼び出します。あなたは物語のごく一部しか取得していません。 The Layout Systemは、要素のツリー内の最上部のPanel
にあるMeasure
を呼び出すことから始まり、MeasureCore
をthis
に呼び出します。ただし、のFrameworkElement
には、数か所でMeasureOverride
がコールされます。
ここで、0とavailableSizeの間に上限がありますか?
編集:日時:「まあ、のMeasureCoreの最後の行...」私が言ったように、あなたはすべてのことのほんの一部を見ている
が進みます。
- すべてのコントロールには、実際に必要なスペースより多くのスペースを要求する非常に一般的な方法が1つあります。
Margin
。それ以上のスペースを要求するカスタムコントロールを作成する必要があります。あなたは私が言うことができるものから、MeasureCore
で見る
- 制約は、それらが設定されている場合、
MinWidth
/MinHeight
とMaxWidth
/MaxHeight
限度としなければなりません。
だから、ドキュメントに書かれているように、コントロールは必要以上のスペースを要求できます。デフォルトのコントロールのどれもMargin
とは別のものではなく、パネルなどのコンテナはそれを尊重する必要はありません。大部分の状況では、子供の親の視点からも意味をなさないので、ほとんどの状況ではドキュメントで読んだ内容を利用しません。
あなたがUserControl
を作成した場合は、XAMLでWidth
とHeight
値を取り除くとCanvas
でそれのインスタンスを配置し、その後、任意のSize
を返すようにMeasureOverride
を上書きしてしまった、あなたはそれはあなたが戻っSize
に表示さ見るでしょう。
このレイアウトシステムの機能は、カスタムパネルやカスタムコントロール、またはユーザーコントロールを作成している場合には使用できますが、そうでない場合はおそらくそうかもしれません。しかしそれはそこにあります。マニュアルが正しい。
MesureCoreの最後の行は、新しいサイズの戻り値です(Math.Max(0.0、width)、Math.Max(0.0、height))。 (これは唯一のreturn文です)、少し前に、if(width> availableSize.Width)width = availableSize.Widthのようなifが2つあります。 – subb