2012-06-20 74 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