Синхронизация WPF ScrollViewer с WinForms ScrollBar - PullRequest
0 голосов
/ 06 августа 2011

Из-за нерешенной проблемы в моем текущем проекте [ Странный пользовательский интерфейс полосы прокрутки в размещенном композитном элементе управления WPF ], мне пришлось отложить решение.Одна из таких идей, которые мне пришли, заключалась в том, чтобы синхронизировать ScrollViewer с панелью прокрутки Windows Forms (горизонтальной и вертикальной).Как мне это сделать?

В сущности, я хочу, чтобы полосы прокрутки WinForms работали как ScrollViewers (с точки зрения перетаскивания и подобных событий).

Ответы [ 2 ]

0 голосов
/ 07 августа 2011

Мне удалось воплотить это в жизнь, не особенно знакомясь с WinAPI. Вот как я это сделал:

  1. Зарегистрировал обработчик события ScrollOffsetChanged в scrollviewer (составной элемент управления, который реализовал интерфейс IScrollInfo, предоставил это событие).
  2. Зарегистрированный обработчик события ValueChanged с полосой прокрутки форм Windows.
  3. Пара сигнальных флагов для предотвращения циклических вызовов обработчику событий.
  4. Первый обработчик вызвал функцию UpdateExternalScrollBars (), которая вычисляла свойство Maximium Scrollbar, используя следующее выражение: ScrollViewer-> ExtentHeight / Width - ScrollViewer-> ViewportHeight / Width. Свойство Value было напрямую установлено в ScrollViewer-> Vertical / HorizontalOffset.
  5. Второй извлекал свойство Value из полосы прокрутки окон и передавал его в ScrolViewer-> ScrollToVertial / HorizontalOffset (). Сигнальные флаги были установлены заранее.
0 голосов
/ 06 августа 2011

Я думаю, что нет другого способа, кроме как посылать / слушать сообщения API Windows низкого уровня. Вы должны хорошо знать API-интерфейсы Win и как ими управлять. Я бы также добавил, что управлять скроллерами - задача средней сложности, но, может быть, это я ...

Вот ссылка с вертикальной прокруткой ссылка.

...