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

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

WindowsFormsHostとGridSplitterのねばねばした関係

全ての画面を作るというわけにいかないプロジェクトもあるので、WindowsFormsHostをグリッド上に配置するというケースも時々あるかと思います。 そんなときに、GridSplitterを入れるとWindowsFormsのコントロールが酷い描画をするという話はよく聞きます。

そんなときの処方がこれです。

    public class ImmediateWindowsFormsHost : WindowsFormsHost
    {
        public ImmediateWindowsFormsHost()
        {
            SizeChanged += ImmediateWindowsFormsHost_SizeChanged;
        }

        private void ImmediateWindowsFormsHost_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            Child.Refresh();
        }
    }

あまり模範的なつくりではありませんが、要はリサイズしたときに即時再描画を行えばいいのです。 SizeChangedが最良かどうかもわかりませんが。

WindowsFormsHostの中身は別ウィンドウが単にWPFの画面上に乗っかっているにすぎません。 その性質を利用するということです。

ほんと・・・時として工数削減のための割り切りも必要になりますよね。