【问题标题】:DataGrid vertical scrollbar problems after resizing调整大小后DataGrid垂直滚动条问题
【发布时间】:2010-07-30 09:45:30
【问题描述】:

我正在 Silverlight 中使用 DataGrid。 如果我有足够的项目以使垂直滚动条对所有大小的窗口都可见,并且我重新调整窗口大小几次,垂直滚动就会不同步。拇指变小,好像控件认为有更多的项目。当我将拇指拖到底部或顶部时,内容开始跳跃。时常发生,非常令人沮丧。 DataGrid 位于 DockPanel 中,该 DockPanel 会根据窗口的大小重新调整大小(没有具体大小)

有人有什么想法吗?

【问题讨论】:

  • 如果将数据网格作为页面中唯一的 UI 控件会发生什么。

标签: silverlight datagrid dockpanel


【解决方案1】:

我有一些类似的问题。其中大部分可以通过在数据网格上调用 UpdateLayout 来解决。

我在停靠面板中也有一个数据网格。当我向下滚动并选择底部记录然后重新加载我的数据网格时,水平滚动条似乎覆盖了最后一条记录。并且垂直滚动条看起来尽可能地向下,不能进一步向下拖动。

如果我使用鼠标上的滚轮,可以看到最后一条记录。

仅当我在最大化窗口中显示我的应用程序时才会发生这种情况。

你遇到过这个问题吗?

【讨论】:

  • 我也做了同样的事情,我也对视图中的最后一项有问题
【解决方案2】:

我用派生的DataGrid 尝试了类似的方法。

不同之处在于OnApplyTemplate只会获取VerticalScrollbar的实例,并且引入了单独的公共方法来调用滚动条上的UpdateLayout()。在可能导致滚动条大小不同步(DataGridcontent 调整大小等)的情况下,将显式调用此类方法

有时仅UpdateLayout() 是不够的,所以我添加了翻转滚动条可见性 - 虽然在 100% 的情况下仍然效果更好,但效果更好

【讨论】:

    【解决方案3】:

    这是数据网格中的错误。您可以通过从数据网格继承并在 OnApplyTemplate 方法上搜索滚动条并手动更新其布局来解决此问题:

    public override void OnApplyTemplate()
    {
        verticalScrollBar = this.GetTemplateChild("VerticalScrollbar") as ScrollBar;
        if (verticalScrollBar != null)
        {
            verticalScrollBar.UpdateLayout();
        }
    }
    

    如果这仍然不起作用,请尝试在代码中手动调用 OnApplyTemplate 方法。

    【讨论】:

      【解决方案4】:

      在数据网格样式中删除垂直滚动条并按照以下步骤操作

      Step1:使用 Scroll Viewer 环绕 DataGridRowsPresenter

      Step2:禁用 HorizantalScrollBarVisibility

      Step3:VerticalScrollBarVisibility 为 Auto

      【讨论】:

        猜你喜欢
        • 2011-03-05
        • 2011-01-03
        • 2021-04-05
        • 2014-07-06
        • 2016-11-27
        • 2010-11-29
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        相关资源
        最近更新 更多