1

我在滾動查看器中放大按鈕時遇到問題。用於Windows 8的滾動查看器在縮放後無法正確移動

查看器內部是一個網格。在這個網格里面是一系列按特定順序排列的圖像。理想情況下,我想通過點擊按鈕從圖像到圖像,並且我已經實現了這一點。我有一個功能縮小按鈕,但是當我放大時...它不滾動到我想要的位置。我使用圖像的邊緣滾動到它。

我似乎遇到的問題是可滾動的高度和寬度不會更新。

當按下變焦出來,我打電話:

zoomFactor = 1; 
rosaryScroll.ZoomToFactor(zoomFactor); 
rosaryScroll.InvalidateScrollInfo(); 
setRosaryState(rosaryState); 

設置念珠狀態滾動到在觀看者的特定圖像通過使用其邊距和ScrollViewer中的尺寸與圖像中心到滾動查看器。

rosaryScroll.ScrollToHorizontalOffset(
    (selectedBead.Margin.Left 
    + (selectedBead.Width/2) 
    + rosaryScroll.Margin.Left/2) 
    * zoomFactor); 
rosaryScroll.ScrollToVerticalOffset(
    (selectedBead.Margin.Top 
    - (selectedBead.Height/2) 
    - rosaryScroll.Margin.Top/2) 
    * zoomFactor); 

當我縮小(zoomFactor爲5)時,可滾動的高度/寬度都很好,並且易於滾動。 rosaryScroll.ScrollableHeight = 2336.0雙 rosaryScroll.ScrollableWidth = 2584.0雙

但是,當我放大(zoomFactor爲1),可滾動高度/寬度仍然很小 rosaryScroll.ScrollableHeight = 84.0雙 rosaryScroll.ScrollableWidth = 0.0 double

那麼如何在縮放調用之後更新此可滾動高度和寬度? InvalidateScrollInfo()似乎是無效的...

回答

1

我會考慮放棄使用ScrollViewer並基於操縱事件和渲染轉換推出自己的解決方案。正如你注意到的那樣 - ScrollViewer不是爲了簡單的編程操作而編寫的,而且它會讓你很難實現任何它不是爲其設計的自定義行爲。根據請求,屬性不會立即更新,您可能需要等待一些事件(例如ViewChanged),然後才能看到新值。您可以嘗試使用我編寫的extensions來設置偏移和縮放因子值的動畫效果,但要注意這些有點冒險,有些人的行爲有問題。

+0

我最終剛剛決定使用它,但謝謝你的建議。 – 2013-04-01 22:12:41

相關問題