Доступ к HorizontalOffset из ScrollViewer в сетке данных - PullRequest
1 голос
/ 02 февраля 2011

У меня есть DataGrid из Silverligt 4.0 SDK. Я хочу получить доступ к «HorizontalOffset» из внутреннего ScrollViewer DataGrid. Я могу получить доступ к прикрепленным свойствам для него, например:

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

Но как мне получить доступ к свойству ScrollViewers HorizontalOffset? Если бы я мог связать его в XAML, было бы неплохо, но этого было бы достаточно, чтобы получить к нему доступ из кода позади.

Я пытался найти его, перебирая визуальное дерево из DataGrid в коде, но я не могу его достать (скроллер всегда нулевой). Я пробовал несколько разных реализаций FindVisualChild ().

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

Ответы [ 2 ]

2 голосов
/ 02 февраля 2011

Возможно, это связано с тем, что DataGrid не использует ScrollViewer

. Шаблон по умолчанию управляет собственной прокруткой и включает две полосы прокрутки.Поэтому вам необходимо получить доступ к горизонтальной полосе прокрутки.

Я использую свой собственный класс VisualTreeEnumeration, код для которого вы найдете здесь .

var scrollBar = MyGrid.Descendents()
                      .OfType<ScrollBar>()
                      .FirstOrDefault(sb => sb.Name == "HorizontalScrollbar");
0 голосов
/ 12 марта 2013

Хотя в вашем принятом ответе говорится, что DataGrid не использует ScrollViewer, похоже, что первым визуальным потомком DataGrid является Border, у которого ScrollViewer в качестве дочернего элемента. Таким образом, вы можете получить на ScrollViewer что-то вроде:

let border = Media.VisualTreeHelper.GetChild(grid, 0) :?> Controls.Border
let scroll = border.Child :?> Controls.ScrollViewer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...