TreeView を操作していると、StackOverflowException 例外で WPF アプリケーションが強制終了します
こんにちは、Platform SDK (Windows SDK) サポートチームです。
今回は、TreeView を操作している時に、WPF アプリケーションが StackOverflowException 例外で強制終了する問題についてご案内します。
現象
TreeView を実装した WPF アプリケーションにおいて、スクロールバーから TreeView をスクロールさせる、TreeView のクライアント領域をマウスでクリックする等の操作を行うと、StackOverflowException 例外でプロセスが強制終了することがあります。
本現象は、.NET Framework のバージョン 4.7 および 4.7.1 でのみ確認されています。
原因
本現象は、.NET Framework 4.7 ならびに 4.7.1 の TreeView 内部で使用している、VirtualizingStackPanel の仮想化処理の不具合が原因で発生しています。
回避策
以下のいずれかの回避策をご検討ください。
- 回避策 (1)
TreeView の VirtualizingStackPanel.IsVirtualizing プロパティを False に設定し、仮想化オフの状態で TreeView を使用するようにします。 - 回避策 (2)
TreeView の IsVirtualizingStackPanel_45Compatible というプロパティを、<appSettings> から True に設定します。
この設定変更により、TreeView 内部の VirtualizingStackPanel の仮想化処理が、.NET Framework 4.5 互換で動くようになります。
<add key="IsVirtualizingStackPanel_45Compatible" value="true"/>
注意
回避策 (2) を採用した場合、TreeView 内部の VirtualizingStackPanel の仮想化処理は .NET Framework 4.5 互換で動くようになります。
この場合、.NET Framework 4.6 以上で VirtualilzationStackPanel に対して行われた不具合修正や品質向上のコードも動かなくなります。
そのため、以下の様な .NET Framework 4.5 固有の現象が新たに発生するようになる可能性があります。
- TreeView を高速にスクロールした場合に、表示される TreeView アイテムの内容が不正になる (表示されるべき TreeView アイテムが表示されない等)
状況
マイクロソフトでは、この現象について調査しています。
進展があり次第、本ブログを更新予定です。