2011-02-02 1 views
1

J'ai un DataGrid du SDK Silverligt 4.0. Je veux accéder à "HorizontalOffset" à partir du ScrollViewer interne du DataGrid. Je peux accéder aux propriétés pour elle, ci-joints tels que:Accès à HorizontalOffset à partir de ScrollViewer dans Datagrid

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

Mais comment puis-je accéder à la propriété ScrollViewers HorizontalOffset? Si je pouvais le lier en XAML, ce serait sympa mais ça pourrait suffire pour y accéder à partir du code derrière.

J'ai essayé de le trouver en itérant l'arbre visuel du DataGrid dans le code derrière mais je n'arrive pas à le trouver (scroller est toujours nul). J'ai essayé plusieurs implémentations différentes de FindVisualChild().

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

Répondre

2

Il pourrait avoir quelque chose à voir avec le fait que le l'DataGrid ne pas utiliser un ScrollViewer

Le modèle par défaut gère son propre défilement et comprend les deux barres de défilement. Vous devez donc accéder à la barre de défilement horizontale.

J'utilise mon propre code VisualTreeEnumeration pour lequel vous trouverez here.

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

Bien que votre réponse acceptée précise que DataGrid n'utilise pas ScrollViewer il semble que le premier enfant d'un visuel DataGrid est un Border qui a un ScrollViewer comme son enfant. Donc, vous pouvez obtenir à l'ScrollViewer en utilisant quelque chose comme:

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