2012-04-02 9 views
1

私のグラフィックアプリケーションでは、グラフを持つキャンバス領域があります。 x座標とy座標に関連付けられたスクロールバーは、キャンバスのこのビューポート領域(グラフが存在する場合)と同期している必要があります。 ユーザーがズームボタンをクリックすると、グラフがズームインおよびズームアウトされます。今問題は、このズームのためにスクロールバーを設定することです。ズームインまたはズームアウト時に、スクロールバーのビューポートはズームのパーセンテージと同期する必要があります。ズームに基づいてwpfのスクロールバーのサムサイズを設定する

この場合、スクロールバーのサムサイズを設定する方法。 私はzoomfactorしてスクロールバー の最大最小価値プロパティとグラフ全体の幅と高さを持っています。

ViewportSizeまたはスクロールバーのサムサイズを設定するにはどうすればよいですか?

IはCurrentValueRangeが可視範囲にズーム与えるViewportSizeしかし

mScrollBarY.ViewportSize = (double)yAxis.CurrentValueRange; 

その正確でないを取得するために以下のコードを使用します。

+1

[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

答えて

3

ここで私は2つのアプローチを参照してください。あなたは、ズームインとズームアウトのようにビューポートのサイズにまで減少すると、エクステントが成長しながら、

  1. をビューポートには、同じことをremaines。だから、両方の変形では、ビューポートを使用すると、ズームアウトとしてエクステント・サイズまで成長し、あなたがズームインするにつれて減少しながら、同じまま。

EDIT

最大

  • のエクステントを更新する必要があります増減する要因を定義する必要があります。それをscale_factorとする。

    scale_factor /= 2; 
    updateScrollBar(); 
    

    ズームアウトのハンドラ:ハンドラで

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

    ズーム:ここScrollBarを更新する方法です

    scale_factor *= 2; 
    updateScrollBar(); 
    

    ところで、私はmsdn forumで、次の式が見つかりました:

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

    最小値とビューポートサイズを同じ値に設定する方法がわかりません。 – Kris

    +0

    あなたが正しいです、私の編集をチェックしてください – EvAlex

    関連する問題