Wpf 如何在DevExpress GridControl中访问ScrollViewer?
我必须访问GridControl中的ScrollViewer才能在滚动时与其他GridControl进行同步 在我使用vanilla DataGrid之前,通过VisualTreeHelper获得ScrollViewer,然后订阅ScrollChanged事件非常容易 我用GridControl尝试了同样的方法,但没有成功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窥
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.滚动至水平偏移(如水平偏移);
}
我怀疑我试图在可视化树尚未构建的过程中过早获得该值。