2011-08-06 49 views

回答

0

我設法實現它,而無需太多的WinAPI。以下是我做的:

  1. 登記的ScrollViewer中一個ScrollOffsetChanged事件處理程序(即執行曝光該事件的IScrollInfo接口的複合控件)。
  2. 註冊一個ValueChanged事件處理程序與Windows窗體滾動條。
  3. 一對信號標誌防止循環調用事件處理程序。
  4. 第一個處理程序調用UpdateExternalScrollBars()函數,該函數使用以下表達式計算Maximium Scrollbar屬性:ScrollViewer-> ExtentHeight/Width - ScrollViewer-> ViewportHeight/Width。 Value屬性直接設置爲ScrollViewer-> Vertical/Horizo​​ntalOffset。
  5. 第二個從窗體窗體滾動條獲取Value屬性並將其傳遞給ScrolViewer-> ScrollToVertial/Horizo​​ntalOffset()。信號標誌預先適當設置。
0

我認爲除了發送/收聽低層API Windows消息外,沒有任何其他方式。您應該對Win API有良好的瞭解,以及如何管理它們。我還補充說,滾動是中等複雜的任務來管理,但也許是我...

這裏是vertical scroll message參考。

+0

我的印象是WPF使用與Win32/WinForms不同的測量尺度。你會碰巧知道這件事嗎? – shadeMe

+0

我沒有說這很容易。但是,通過在ScrollViewer代碼中窺視,它似乎使用相同的API。換句話說,無論頂層UI如何,滾動條應該總是相同的。 –