我有一个根据用户输入改变大小的画布,我想点击一个按钮,并能够缩小以查看整个画布。基本上我知道画布的高度和宽度我只想放大或缩小,以便用户可以看到整个画布。我有放大和缩小工作,但不知道如何缩放适合?有什么想法吗?
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;
}
}
如果我在开始时按下缩放以适合按钮它很好,但是当用户进行一些手动变焦时它会变得混乱。我的想法是,每次用户点击缩放以适应按钮时,它将首先返回其初始状态,然后使用缩放来拟合代码,但不确定。
感谢您的帮助
答案 0 :(得分: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%),以便使用样本矩形进行拟合。