XAML ベースのアプリでは、画面上の要素を操作したり、サイズを変更したり、要素を移動したりする必要があることがよくあります。この状況は通常、非常にカスタムの UI コントロールで発生します。
スタッフのロードやデータバインディングなどのタイミングは、イライラするタイミングの問題を引き起こす可能性があります。
従来、私の同僚と私は、従属プロパティが「最終」状態にあるときに後で実行されるように、作業を UI スレッドに「再ディスパッチ」することでこれらの問題を回避してきました。
これを行うより良い方法はありますか?どのような戦略がうまくいきましたか?
LayoutUpdated イベントは非常にノイズが多く、きめが細かい可能性があり、登録解除にはメソッドの Lambda を放棄する必要があるため、外部ロジックから囲まれた変数にアクセスできません。
編集
具体的な例を挙げます。カスタム コントロールは、顔認識を行うときに顔の周りにアウトラインを描画するため、ここでは完全にカスタムのことを話しているので、XAML はそのままでは何もしません。
画像を拡大縮小してサイズを調整し、パスとジオメトリを拡大縮小してサイズを調整して、すべてが整列するようにする必要があります。
要素の高さと幅をプログラムで変更した場合、その影響はすぐには反映されません。UI スレッドが XAML フレームワークに解放されたときにのみ、レンダリング サブシステムがすべてを再配置します。
したがって、変更された値に依存するロジックは、フレームワークがすべてを再配置した後に実行する必要があるため、この作業は UI スレッドで後で実行するようにスケジューリングする必要があるため、ディスパッチに頼ります。臭い。
多くのイベントとバーチャルは、必要なデータがまだ利用できないときに呼び出されます。場合によっては、データの到着時に作業を行う必要があります (つまり、プロパティの変更通知)。これは通常、XAML レイアウト イベントをトリガーしません。この場合、ディスパッチャ ハックに頼ります。