将WPF ScrollViewer与WinForms ScrollBar同步

时间:2011-08-06 12:14:47

标签: wpf winforms binding interop scroll

由于我当前的项目[Weird scrollbar UI in hosted WPF composite control]中存在未解决的问题,我不得不推迟解决方法。我提出的一个这样的想法是让ScrollViewer与Windows Forms ScrollBar(水平和垂直)保持同步。我该怎么做呢?

本质上,我希望WinForms滚动条像ScrollViewers一样工作(就拖动和事件而言)。

2 个答案:

答案 0 :(得分:0)

我认为除了发送/收听低级API Windows消息传递之外别无他法。您应该对Win API有一个很好的了解,以及如何管理它们。我还补充说,滚动器是管理中的复杂任务,但也许是我......

以下是vertical scroll message参考。

答案 1 :(得分:0)

我设法实现它而无需使用WinAPI。我是这样做的:

  1. 使用scrollviewer注册了ScrollOffsetChanged事件处理程序(实现IScrollInfo接口的复合控件公开了事件)。
  2. 使用Windows窗体滚动条注册了ValueChanged事件处理程序。
  3. 一些信号标志,用于阻止对事件处理程序的循环调用。
  4. 第一个处理程序调用UpdateExternalScrollBars()函数,该函数使用以下表达式计算Maximium Scrollbar属性:ScrollViewer-> ExtentHeight / Width - ScrollViewer-> ViewportHeight / Width。 Value属性直接设置为ScrollViewer-> Vertical / Horizo​​ntalOffset。
  5. 第二个从Windows窗体滚动条中获取Value属性并将其传递给ScrolViewer-> ScrollToVertial / Horizo​​ntalOffset()。信号标志事先已适当设定。