2011-02-02 95 views
1

我有Silverligt 4.0 SDK的DataGrid。我想從DataGrid的內部ScrollViewer訪問「Horizo​​ntalOffset」。我可以訪問它的附加屬性,如:從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

它可能有一些做的事實在DataGrid不使用ScrollViewer

默認模板管理自己的滾動和包括兩個滾動條。因此您需要訪問水平滾動條。

我用我自己的VisualTreeEnumeration類的代碼,你會發現here

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

雖然你接受的答案指出DataGrid不使用它會出現一個DataGrid的第一視覺孩子ScrollViewer是一個Border具有ScrollViewer作爲其子。所以你可以使用類似於ScrollViewer

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