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 アイテムが表示されない等)

 

状況

マイクロソフトでは、この現象について調査しています。
進展があり次第、本ブログを更新予定です。