では、親の にリンクする子オブジェクトの幅にバインディングを配置するとActualWidth
、どうなるでしょうか?
私の推測では、親は子が必要とする幅を測定し、子は親に 0 の幅を伝え、その後親は配置中に実際のスペースを与えられ、子は何も望まなかったので子にゼロを与えようとします。次に、親に与えられたスペースの実際の幅により、バインディングによって子の幅が変更されます。この時点で、レイアウトが再度実行されると思います。
ただし、これはバインディングがそれほど速く伝播しないことを前提としています。バインドされた値がいつターゲットに伝播するのか、私はまだぼんやりしています。それはすべて、親の actualwidth 値がいつ変更されるかによって異なります。これは、レイアウトが完了した後に発生しますか? そして、バインドされたピースが更新されますか? すべてのバインディングは、現在実行中のコードを中断してターゲット値を更新しますか? そうでない場合、あるバインディングが再描画を必要とする変更を伝播し、別のバインディングが再描画を引き起こす別の変更を伝播すると、問題が発生しませんか?
一部の人々は、私の実際の問題は何かと尋ねました。
そのため、最初は、使用可能なスペースを埋めるためにコントロール ストレッチが必要でした。十分に単純ですが、スクロールビューアーにしたかったのです。Scrollviewer は、測定中に子に無限のスペースを与えます。代わりに、子コントロールの幅と高さを親の実際の幅と実際の高さにバインドできます。レイアウトは 2 回目のパスを行い、すべてがうねりのように見えます。
ただし、後で、コントロールテンプレートでコントロールを拡大する同様の種類の問題が発生しましたが、最小幅と配置 = ストレッチを設定して拡大できることがわかりました。
しかし、以前に他のコントロールでそれを試してみてうまくいかなかったことをはっきりと覚えていたので、戻って2つのケースの違いを理解しようとしました. 基本的に、そのうちの 1 つが数レベル上のスタックパネルにあるということになりました。
そのため、一方にバインディングを使用し、もう一方に minwidth とアライメント メソッドを使用しています。とにかく、私がやっている方法が後で奇妙なバグを作成しないようにするために、これにのみ興味がありました.
幅または高さが変更されたときにレイアウトがすぐに実行されないことを望んでいますが、代わりにシステムがサイズの変更を定期的に再チェックします