2011-02-09 159 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%)为了适合使用示例矩形。