仮想化した TreeView コントロールが自動的にスクロールされる。

 

こんにちは、Platform SDK (Windows SDK) サポートチームです。
今回は、予期しないタイミングで TreeView コントロールが自動的に縦方向へスクロールされるという、WPF の問題についてご案内します。

 

現象

 

WPF アプリケーションにおいて、仮想化した TreeView コントロールにアイテムを追加していると、予期しないタイミングで TreeView コントロールに縦方向のスクロールが発生するケースがあります。
このスクロールは自動的に発生してしまうため、TreeView コントロールのアイテム数が多い場合は、ユーザーがそれまで目視で確認していたアイテムを見失う可能性があります。

この問題は、WPF の仮想化した TreeView コントロールでのみ発生することが確認されています。

 

原因

 

TreeView コントロールにアイテムを追加すると、WPF 内部では、追加したアイテムの高さに応じてスクロールバーのサイズ・現在位置を計算し、それらを縦方向に変化させます。

しかしながら、スクロールバーのサイズ・現在位置を計算するための、WPF 内部のロジックには不具合があります。
そのため、追加されたアイテムと追加する直前のスクロールバーのサイズ・現在位置によっては、正確な計算結果が得られず、予期しないタイミングで予期しない位置への縦方向のスクロールが発生する問題が起こります。

 

状況

 

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