【问题标题】:Prevent DataGrid Scrolling From Snapping To Rows防止 DataGrid 滚动捕捉到行
【发布时间】:2012-06-20 16:00:47
【问题描述】:

我有一个 DataGrid,其中每一行都包含一个 ItemsControl。因此,网格的行可以非常高。如果一行高于网格的高度,我将无法滚动查看该行的其余部分,因为 DataGrid 会自动滚动到下一行。也就是说,如果我正在查看第 1 行的上半部分并单击垂直滚动条的向下箭头,它会跳到第 2 行的顶部。它不会让我看到第 1 行的下半部分。我该怎么做DataGrid 平滑滚动行而不是逐行步进?

【问题讨论】:

    标签: wpf wpfdatagrid


    【解决方案1】:

    听起来您想禁用虚拟化。为此,只需将CanContentScroll 设置为False 即可获得ScrollViewer。但是,如果您的 DataGrid 中有大量数据,则打开虚拟化可能会变得非常慢,因为所有 DataGridRows 将立即生成,而不是在用户实际可见时生成。

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

    【讨论】:

    • 谢谢@Meleak。我之前尝试过,它没有改变任何东西,但这次它成功了。我不想禁用虚拟化,但如果我想查看一整行,我有什么选择?对我来说听起来像是一个 DataGrid 错误。说到这一点,将 CanContentScroll 更改为 false 也会导致我的前 29 行在第一次加载网格时布局不正确。行不会垂直扩展以适应其内容。如果我再次单击按钮加载它,它会正确显示。
    • 我还没有看到任何在启用虚拟化的情况下获得“平滑滚动”的方法。关于 29 行未正确加载,这听起来像是您遇到的一个奇怪的错误。你能发布一些重现问题的代码吗?
    【解决方案2】:

    我遇到了滚动会粘在行上的问题。然后偶遇:https://stackoverflow.com/a/13384164/4791472

    <Datagrid ..
                VirtualizingPanel.ScrollUnit="Pixel"
    

    基本上它将滚动设置为对齐像素而不是项目。这将带来流畅的滚动体验。

    【讨论】:

    • 当您需要虚拟化时,这是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2021-12-04
    • 2019-09-02
    相关资源
    最近更新 更多