2012-06-20 73 views
4

我有一個DataGrid,其中每行包含一個ItemsControl。正因爲如此,網格的排可以很高。如果一行高於網格的高度,我無法滾動查看該行的其餘部分,因爲DataGrid自動滾動到下一行。也就是說,如果我正在查看第1行的上半部分,並且單擊了垂直滾動條的向下箭頭,則會跳到第2行的頂部。它不會讓我看到第1行的下半部分。如何製作DataGrid平滑滾動行而不是逐行逐行?防止DataGrid從捕捉到行滾動

回答

6

聽起來像你想禁用虛擬化。要做到這一點,只需將CanContentScroll設置爲False就可以了ScrollViewer。但是,如果您的DataGrid中有大量數據,那麼虛擬化將變得非常緩慢,因爲所有DataGridRows都將一次生成,而不是實際可見的時間。

<DataGrid ... 
      ScrollViewer.CanContentScroll="False"> 
+0

謝謝@Meleak。我之前嘗試過,它沒有改變任何東西,但這次它是在做這個伎倆。我不想禁用虛擬化,但如果要查看整行,我有什麼選擇?聽起來像是一個DataGrid的bug。說到這一點,將CanContentScroll更改爲false也會導致我的前29行在第一次加載網格時無法正確佈局。行不會垂直擴展以適應其內容。如果我點擊按鈕再次加載它,它會正確顯示。 – xr280xr

+0

我還沒有看到任何啓用虛擬化的「平滑滾動」方式。關於29行加載不正確,這聽起來像是你遇到的一個奇怪的錯誤。你能發表一些代碼來重現問題嗎? –

+0

我有我的待辦事項列表。 – xr280xr

3

我碰到這個問題,其中滾動將堅持行。然後,我遇到了:https://stackoverflow.com/a/13384164/4791472

<Datagrid .. 
      VirtualizingPanel.ScrollUnit="Pixel" 

基本上它設置滾動捕捉到的像素,而不是項目。這將使平滑的滾動體驗。

+0

當您需要虛擬化時,這是正確的選擇。 – David