Silverlight 从Datagrid中的ScrollViewer访问水平偏移量

Silverlight 从Datagrid中的ScrollViewer访问水平偏移量,silverlight,silverlight-4.0,datagrid,Silverlight,Silverlight 4.0,Datagrid,我有一个来自Silverligt4.0SDK的数据网格。我想从DataGrid的内部ScrollViewer访问“HorizontalOffset”。我可以访问它的附加属性,例如: <data:DataGrid x:Name="MyGrid" ItemsSource="{Binding Elements}" ScrollViewer.HorizontalScrollBarVisibility="Visible"> 但是

我有一个来自Silverligt4.0SDK的数据网格。我想从DataGrid的内部ScrollViewer访问“HorizontalOffset”。我可以访问它的附加属性,例如:

<data:DataGrid x:Name="MyGrid"
               ItemsSource="{Binding Elements}"
               ScrollViewer.HorizontalScrollBarVisibility="Visible">

但是如何访问ScrollViewer HorizontalOffset属性?如果我能将它绑定到XAML中,那就太好了,但可以从代码隐藏中访问它

我试图通过在代码隐藏中从DataGrid中迭代可视化树来找到它,但我无法找到它(scroller总是空的)。我尝试了FindVisualChild()的几种不同实现

var scroller=MyGrid.FindVisualChild();

这可能与
DataGrid
不使用
ScrollViewer这一事实有关

默认模板管理自己的滚动,并包括两个滚动条。因此,您需要访问水平滚动条

我使用自己的
VisualTreeEnumeration
对您可以找到的代码进行分类

var scrollBar=MyGrid.degents()
第()类
.FirstOrDefault(sb=>sb.Name==“水平滚动条”);

尽管您接受的答案表明
DataGrid
没有使用
ScrollViewer
,但是
DataGrid
的第一个可视子级似乎是一个
边框,其子级为
ScrollViewer
。因此,您可以使用类似以下内容访问
滚动查看器

let border = Media.VisualTreeHelper.GetChild(grid, 0) :?> Controls.Border
let scroll = border.Child :?> Controls.ScrollViewer
var scrollBar = MyGrid.Descendents()
                      .OfType<ScrollBar>()
                      .FirstOrDefault(sb => sb.Name == "HorizontalScrollbar");
let border = Media.VisualTreeHelper.GetChild(grid, 0) :?> Controls.Border
let scroll = border.Child :?> Controls.ScrollViewer