2011-02-09 48 views
1

我有一個根據用戶輸入更改大小的畫布,我想要點擊一個按鈕並能夠縮小以查看整個畫布。基本上我知道畫布的高度和寬度,我只想放大或縮小,以便用戶可以看到整個畫布。我放大和縮小工作,但不知道如何縮放以適合?有什麼想法嗎?縮放以適應C#中的畫布大小?

2月11日

謝謝您的答覆,這是很大的幫助,我能夠完全縮小在畫布上。我現在遇到的問題是用戶可以放大和縮小控件。因此,如果用戶放大和縮小,然後嘗試縮放到適合在畫布上的縮放因子將被關閉,我的代碼如下

這是進出畫布上基本變焦:

double ScaleRate = 1.2; 

    public void buttonZoomIn_Click(object sender, RoutedEventArgs e) 
    { 
     st.ScaleX *= ScaleRate; 
     st.ScaleY *= ScaleRate; 
    } 

    public void buttonZoomOut_Click(object sender, RoutedEventArgs e) 
    { 
     st.ScaleX /= ScaleRate; 
     st.ScaleY /= ScaleRate; 
    } 

縮放以適應按鈕,我想按縮小完全在畫布上:

private void zoomToFitBt_Click(object sender, RoutedEventArgs e) 
    { 
     float maxWidthScale = (float)ScrollViewerCanvas.Width/(float)Canvas1.Width; 
     float maxHeightScale = (float)ScrollViewerCanvas.Height/(float)Canvas1.Height; 
     float scale = Math.Min(maxHeightScale, maxWidthScale); 

     if (st.ScaleX > scale || st.ScaleY> scale) 
     { 
      st.ScaleX *= scale; 
      st.ScaleY *= scale; 
     } 
    } 

如果我按下縮放以適應按鈕關閉啓動它是好的,但其在用戶做了一些手動縮放,它搞砸了。我的想法是,也許每當用戶點擊縮放以適應按鈕時,它將首先回到其初始狀態,然後使用縮放來適應代碼,但不確定這一點。

感謝基於給定的僅有的一些資料你的幫助球員

+2

1.找出你需要放大多少才能看到整個畫布; 2.做到這一點。 – 2011-02-09 21:13:49

+0

需要看到縮放代碼。 – 2011-02-09 21:16:35

回答

3

,我將簡化您的問題到我衡量你所要求的最基本工科數學水平。我想你問...

「我有2個矩形(視口, 和畫布)。如何調整 畫布,使得其大如 但不超過寬度 或視口的高度。「

此代碼將確定如何縮放矩形,使其幾乎不能放入另一個矩形內。

Rectangle c = new Rectangle(0, 0, 200, 100); //Canvas Rectancle (assume 200x100) 
Rectangle v = new Rectangle(0, 0, 50, 50); //Viewport Rectangle (assume 50x50) 

//The maximum scale width we could use 
float maxWidthScale = (float)v.Width/(float)c.Width; 

//The maximum scale height we could use 
float maxHeightScale = (float)v.Height/(float)c.Height; 

//Use the smaller of the 2 scales for the scaling 
float scale = Math.Min(maxHeightScale, maxWidthScale); 

scale = .25(或25%)爲了適合使用示例矩形。