我有Silverligt 4.0 SDK的DataGrid。我想从DataGrid的内部ScrollViewer访问“HorizontalOffset”。我可以访问它的附加属性,例如:
<data:DataGrid x:Name="MyGrid"
ItemsSource="{Binding Elements}"
ScrollViewer.HorizontalScrollBarVisibility="Visible">
但是如何访问ScrollViewers HorizontalOffset属性?如果我可以在XAML中绑定它,那就太好了但是从后面的代码访问它就足够了。
我试图通过在代码后面的DataGrid中迭代可视化树来找到它,但我无法掌握它(滚动器总是为空)。我已经尝试了几种不同的FindVisualChild()实现。
var scroller = MyGrid.FindVisualChild<ScrollViewer>();
答案 0 :(得分:2)
这可能与DataGrid
不使用ScrollViewer
默认模板管理自己的滚动并包含两个滚动条。因此,您需要访问水平滚动条。
我使用自己的VisualTreeEnumeration
课程代码,您将找到here。
var scrollBar = MyGrid.Descendents()
.OfType<ScrollBar>()
.FirstOrDefault(sb => sb.Name == "HorizontalScrollbar");
答案 1 :(得分:0)
虽然您接受的答案表明DataGrid
未使用ScrollViewer
,但DataGrid
的第一个视觉孩子显示为Border
且ScrollViewer
作为它的孩子。因此,您可以使用以下内容获取ScrollViewer
:
let border = Media.VisualTreeHelper.GetChild(grid, 0) :?> Controls.Border
let scroll = border.Child :?> Controls.ScrollViewer