左側に +/- ボタンを許可し、ツリー構造のテーブルを表示できるカスタム コードを含む Silverlight データグリッドがあります。+/- ボタンは、私が呼び出したように、ViewModelRows の IsExpanded プロパティにバインドされています。行の可視性は、すべての親行が展開されているかどうかに基づいて決定される ViewModelRows の IsVisible プロパティにバインドされます。簡単です。
このコードは、PageUp/PageDown または矢印キーを使用してグリッドを上下にスクロールすると、適切な行がすべて非表示になり、すべてが適切な構造になり、+/- ボタンを心ゆくまで操作できるという点でうまく機能します。ただし、右側の垂直スクロールバーは、正しいサイズで開始し、行をスムーズにスクロールしますが、行を折りたたんでから再度展開すると、正しいサイズに戻りません。
スクロールバーは通常、コレクション全体をスクロールするために移動できますが、大きすぎるため、バーが一番下に移動すると、さらに多くの行を通過し、ぎくしゃくして下に移動します。の下部に表示されるか、まったくスクロールに失敗することがあります。これを説明するのは非常に難しいので、2 つのグリッドの行数が同じであっても、スクロールバーの長さの違いを示すために、黒い線が描かれたスクリーンショットを含めました。
これは、Datagrid が行の仮想化を行う方法に関連するバグである可能性があると思います。展開状態が変化したときに各行の高さを適切に追跡していないように思えます。LoadingRow またはそのような醜いものでスクロールバーのサイズを再計算するためにプログラムで「突く」(ハックを読む) 方法はありますか? コード サンプルを含めたいと思いますが、2 つの c# ファイルと 1 つの xaml ファイルがあるため、自己完結型の方法で再現できるようにする前に、この種の問題について誰かが聞いたことがあるかどうかを確認したかったのです。繰り返しますが、矢印キーによるスクロールは正常に機能するため、基本的なロジックとバインディングが機能していると確信しています。行の高さが適切に計算されていないという問題があります。
初心者なのでイメージタグが使えないのでこちら」
http://img210.imageshack.us/img210/8760/messedupscrollbars.png