C#+WPFチューニング戦記

C#とWPFで高速なコードと最適なシステムを書くためにやってきたいろいろな事を書いてみます。.NET Frameworkのソースコードを読み解きましょう。なお、ここに書かれているのは個人の見解であって何らかの団体や企業の見解を代表するものではありません。

手遅れ SizeChanged

SizeChangedのイベントは、ちょっと届くのが遅いと思います。

本当の本当に、レイアウトパスも済んだところで届きます。うっかりこのタイミングで他のコントロールのサイズを上書きしてしまうと、またレイアウトパスが走ります。最悪、バインディングパスも走ります。

SizeChangedイベントを受けてから、それに合わせようとコントロールのサイズや位置を操作するのではなく、あくまでレイアウトパス内(あるいはバインディング、それ以前のユーザーコード)でこれらの処理をしなければ、無駄なレイアウトパスが何度も何度も走る羽目に陥ります。

MeasureとArrangeとUpdateLayoutのリファレンスコードを読んでから、このイベントをどう扱うべきか考えてください。