0

我必须访问 GridControl 中的 ScrollViewer 才能在滚动时与我的其他 GridControls 同步。

在我使用 vanilla DataGrid 之前,很容易通过 VisualTreeHelper 获取 ScrollViewer,然后订阅 ScrollChanged 事件。

我尝试了与 GridControl 相同的方法,但没有运气。VisualTreeHelper.GetChildrenCount()给我 0 也LogicalTreeHelper.GetChildren()给了我一个空的迭代器。

但..

WPF Snooper 可以完美地访问逻辑和可视化树!那么,我做错了什么以及为什么我无法获得 WPF Snooper 能够获得的信息?

4

1 回答 1

2

就是这样!我试图过早地初始化它。

我在构造函数中做了它,当它被初始化时。

如果有人需要解决方案如何同步数据网格(无论是普通的DataGrid还是DevExpress GridControl或它们的混合)以在水平滚动并且有更多列时显示相同的数据,那么你可以显示然后这里是解决方案:

在您的构造函数中:

    mainDataGrid.Loaded += (sender, args) =>
                           {
                               ScrollViewer sv = mainDataGrid.FindVisualTreeChild<ScrollViewer>();

                               if (sv != null)
                                   sv.ScrollChanged += DataGridScrollChanged;

                           };

为 ScrollChanged 事件添加事件处理程序:

private void DataGridScrollChanged(object sender, ScrollChangedEventArgs e)
{
    if (e.HorizontalChange == 0.0f)
        return;
    ScrollViewer sv = dependentDataGrid1.FindVisualTreeChild<ScrollViewer>();
    if (sv != null)
        sv.ScrollToHorizontalOffset(e.HorizontalOffset);

    sv = dependentDataGrid2.FindVisualTreeChild<ScrollViewer>();
    if (sv != null)
        sv.ScrollToHorizontalOffset(e.HorizontalOffset);
}
于 2013-01-21T20:31:12.380 回答