Прикрепленное событие?Как удалить обработчик события ScrollChanged для WPF DataGrid во время выполнения - PullRequest
3 голосов
/ 20 октября 2011

Класс WPF DataGrid (не для Windows Forms DataGrid!) Можно настроить для автоматической обработки прокрутки без внешнего ScrollViewer, и можно зарегистрировать обработчик событий для внутреннего * 1004 элемента управления* полоса прокрутки, написав XAML следующим образом:

<DataGrid ScrollViewer.ScrollChanged="dGrid_ScrollChanged"  />

Поправьте меня, если я ошибаюсь, но в этом случае внутренний ScrollViewer выглядит как недокументированное вложенное свойство.ScrollViewer не является открытым полем DataGrid, и вы не найдете ссылки ни на ScrollViewer, ни на событие ScrollChanged в документации DataGrid.Другими словами, простое выполнение myDataGrid.ScrollViewer.ScrollChanged += dGrid_ScrollChanged не работает.

Итак, мой вопрос: как можно добавить или удалить обработчик события для этого события ScrollChanged во время выполнения?Я пытаюсь понять, что здесь происходит, так же, как пытаюсь решить проблему, поэтому чем больше объяснений, тем лучше.

Ответы [ 2 ]

6 голосов
/ 21 октября 2011

Попробуйте использовать AddHandler и RemoveHandler UIElement, как это в вашем коде -

dg.AddHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dg_ScrollChanged));
dg.RemoveHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dg_ScrollChanged));

Поскольку ScrollViewer не является свойством зависимостей вашей dataGrid, вам нужно подключить с помощью AddHandler.Точно так же, как вы не можете установить Grid.RowSpan просто так dg.Grid.RowSpan = 2 Вы должны установить свойства присоединения наподобие dg.SetValue(Grid.RowSpanProperty, 2) То же самое относится и к событиям, которые необходимо перехватить для прикрепленных свойств.

0 голосов
/ 21 октября 2011

Вы можете использовать UIElement.RemoveHandler метод.

если ваша сетка имеет имя: "сетка", то вы можете сделать это так:

grid.RemoveHandler(ScrollViewer.ScrollChangedEvent, new ScrollChangedEventHandler(dGrid_ScrollChanged));

ScrollViewer.ScrollChanged не является свойством DataGrid, но это присоединенное свойство, которое вы можете использовать в FrameworkElements, которые используют ScrollViewer

...