2

スクロールと仮想化を備えたデータ グリッドがあります。余分な 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 単位のスクロールを「切り取って無視」します。

4

1 に答える 1

0

DataGrid でプロパティ ScrollViewer.VerticalScrollBarVisibility="Auto" を使用してください。

このプロパティの詳細については、http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.verticalscrollbarvisibility.aspxを参照してください。

于 2012-07-02T19:27:29.177 に答える