从Datagrid中的ScrollViewer访问Horizo​​ntalOffset

时间:2011-02-02 15:52:11

标签: silverlight silverlight-4.0 datagrid

我有Silverligt 4.0 SDK的DataGrid。我想从DataGrid的内部ScrollViewer访问“Horizo​​ntalOffset”。我可以访问它的附加属性,例如:

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

但是如何访问ScrollViewers Horizo​​ntalOffset属性?如果我可以在XAML中绑定它,那就太好了但是从后面的代码访问它就足够了。

我试图通过在代码后面的DataGrid中迭代可视化树来找到它,但我无法掌握它(滚动器总是为空)。我已经尝试了几种不同的FindVisualChild()实现。

var scroller = MyGrid.FindVisualChild<ScrollViewer>();

2 个答案:

答案 0 :(得分:2)

这可能与DataGrid不使用ScrollViewer

的事实有关

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

我使用自己的VisualTreeEnumeration课程代码,您将找到here

var scrollBar = MyGrid.Descendents()
                      .OfType<ScrollBar>()
                      .FirstOrDefault(sb => sb.Name == "HorizontalScrollbar");

答案 1 :(得分:0)

虽然您接受的答案表明DataGrid未使用ScrollViewer,但DataGrid的第一个视觉孩子显示为BorderScrollViewer作为它的孩子。因此,您可以使用以下内容获取ScrollViewer

let border = Media.VisualTreeHelper.GetChild(grid, 0) :?> Controls.Border
let scroll = border.Child :?> Controls.ScrollViewer