Silverlight 从Datagrid中的ScrollViewer访问水平偏移量
我有一个来自Silverligt4.0SDK的数据网格。我想从DataGrid的内部ScrollViewer访问“HorizontalOffset”。我可以访问它的附加属性,例如: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"> 但是
<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