Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何在DevExpress GridControl中访问ScrollViewer?_Wpf_Devexpress_Scrollviewer_Gridcontrol - Fatal编程技术网

Wpf 如何在DevExpress GridControl中访问ScrollViewer?

Wpf 如何在DevExpress GridControl中访问ScrollViewer?,wpf,devexpress,scrollviewer,gridcontrol,Wpf,Devexpress,Scrollviewer,Gridcontrol,我必须访问GridControl中的ScrollViewer才能在滚动时与其他GridControl进行同步 在我使用vanilla DataGrid之前,通过VisualTreeHelper获得ScrollViewer,然后订阅ScrollChanged事件非常容易 我用GridControl尝试了同样的方法,但没有成功VisualTreeHelper.GetChildrenCount()给我0,并且LogicalTreeHelper.GetChildren()给我一个空迭代器 但是 WPF窥

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

在我使用vanilla DataGrid之前,通过VisualTreeHelper获得ScrollViewer,然后订阅ScrollChanged事件非常容易

我用GridControl尝试了同样的方法,但没有成功
VisualTreeHelper.GetChildrenCount()
给我0,并且
LogicalTreeHelper.GetChildren()给我一个空迭代器

但是

WPF窥探者可以访问逻辑树和可视树,这非常完美!
那么,我做错了什么,为什么我不能获得WPF Snooper能够获得的信息呢?

就是这样!我试图初始化它太早了

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

如果有人需要解决方案如何同步数据网格(无论这是香草DataGrid还是DevExpressGridControl或它们的混合),以便在水平滚动时显示相同的数据,并且您有更多的列,然后您可以显示,这是解决方案:

在构造函数中:

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

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

                           };
mainDataGrid.Loaded+=(发送方,参数)=>
{
ScrollViewer sv=mainDataGrid.FindVisualTreeChild();
如果(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);
}
private void DataGridScrollChanged(对象发送方,ScrollChangedEventArgs e)
{
如果(如水平变化==0.0f)
返回;
ScrollViewer sv=dependentDataGrid1.FindVisualTreeChild();
如果(sv!=null)
sv.滚动至水平偏移(如水平偏移);
sv=dependentDataGrid2.FindVisualTreeChild();
如果(sv!=null)
sv.滚动至水平偏移(如水平偏移);
}

我怀疑我试图在可视化树尚未构建的过程中过早获得该值。