Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
こんにちは、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 アイテムが表示されない等)
状況
マイクロソフトでは、この現象について調査しています。
進展があり次第、本ブログを更新予定です。