スクロールと仮想化を備えたデータ グリッドがあります。余分な 1 ~ 23 ピクセルが下にスクロールする可能性があることを除いて、他のすべては問題ありません。
右側にデータ グリッド、カスタム スタイルのスクロールバーがあり、下部にスプリッターがあります。問題は、スプリッターとグリッドの間に空のスペースがあることです。それ自体は問題ありません (スプリッターのサイズを変更して、空きスペースが増えます) が、スクロールバーが必要以上に大きくなり、他の場所で問題が発生します。スクロールバーが「コンテンツと同じ高さ」であることを確認するにはどうすればよいですか。
スクロール位置を読み取り、行の高さを掛けて現在の位置を判断するコードが別の場所にあり、スクロール可能な領域を超えるとすぐにバグが発生するため、空の場所にスクロールしたくありません。
データ グリッドは次のようになります。
<DataGrid CanUserSortColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeColumns="True"
CanUserReorderColumns="True"
SelectionUnit="FullRow"
ScrollViewer.CanContentScroll="True"
SelectionMode="Single"
HeadersVisibility="Column"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling"
AutoGenerateColumns="False" />
更新:理由はわかっていると思います。私は仮想化を使用しているため、(ピクセル単位ではなく) 1 行ずつスクロールするため、行が部分的に見えるようにスクロールすることはできません。常に行の高さ (私の場合は 24 単位) だけスクロールします。ここで、グリッド スプリッターを移動して最後の行を部分的にのみ表示すると、スクロールバーが正しく表示されますが、問題は 24 単位スクロールするため、下部に空のスペースが表示されることです。
そのことに気が付くと、この問題を修正できるかどうかさえ確信が持てません。スクロールを超えているかどうかを確認するために、別の場所でコードを編集する必要があります。超えている場合は、最後の 1 ~ 23 単位のスクロールを「切り取って無視」します。