2012-04-02 60 views
1

在我的圖形應用程序中,有一些圖形的畫布區域。與x座標和y座標相關聯的滾動條必須與畫布的該視口區域(圖形所在的位置)同步。 當用戶單擊縮放按鈕時,圖形將放大和縮小。現在的問題是爲這個縮放設置滾動條。放大或縮小時,滾動條的視口應與縮放百分比同步。基於縮放在wpf中設置滾動條的縮略圖大小

如何在這種情況下設置滾動條的大小。 我有滾動條 的最大最小價值財產和整個圖的寬度和高度與zoomfactor。

我該如何設置ViewportSize或滾動條的大小?

我用下面的代碼片段,以獲得ViewportSize但其並不準確

mScrollBarY.ViewportSize = (double)yAxis.CurrentValueRange; 

其中CurrentValueRange給出可見光範圍內的縮放。

+1

難道你不能通過向Canvas應用[LayoutTransform](http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.layouttransform.aspx)並將其放入[的ScrollViewer(http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.aspx)? – Clemens 2012-04-02 12:45:04

回答

3

在這裏我看到了兩個辦法:

  1. 視窗remaines相同,而程度成長,如您在放大和縮小時下降到視口大小。所以,你需要更新最大
  2. 程度保持不變,而視口長大到的範圍大小,你縮小,並且隨着你放大。

編輯

在這兩個變種你需要定義一些增加或減少的因子。讓它成爲scale_factor。以下是更新ScrollBar方法:

void updateScrollBar() 
{ 
    scrollBar.Minimum = 0; 
    scrollBar.Maximum = extent; 
    scrollBar.ViewportSize = viewport * scale_factor; 
    scrollBar.SmallChange = 10 * scale_factor; 
} 

放大處理程序:

scale_factor /= 2; 
updateScrollBar(); 

縮小處理程序:

scale_factor *= 2; 
updateScrollBar(); 

順便說一句,我發現下面的公式在msdn forum

ThumbSize = TrackLength * ViewportSize/(Maximum - Minimum + ViewportSize) 
+0

我不明白我們可以如何將Minimum和ViewportSize設置爲相同的值。 – Kris 2012-04-03 04:04:14

+0

你是對的,請查看我的編輯 – EvAlex 2012-04-03 07:11:48