我有一种方法可以放大和缩小WPF中的图像。它看起来像这样:
private void onMouseWheel_Scroll(object sender, MouseWheelEventArgs e)
{
var position = e.MouseDevice.GetPosition(CctvImage);
var renderTransformValue = CctvImage.RenderTransform.Value;
if (e.Delta > 0)
renderTransformValue.ScaleAtPrepend(1.1, 1.1, position.X, position.Y);
else
renderTransformValue.ScaleAtPrepend(1 / 1.1, 1 / 1.1, position.X, position.Y);
CctvImage.RenderTransform = new MatrixTransform(renderTransformValue);
}
这适用于放大,我喜欢放大鼠标专用于屏幕的功能。
然而,当缩小用户时,能够缩小超过屏幕的图像点。这意味着很难回到占据整个窗口的图像原始位置。他们能够达到图像的大部分不在屏幕上或者有大量空白的地方,这是我所描述的一个例子:
正如您所看到的,屏幕上的图像很小,而我希望防止用户进一步缩小图像占据整个窗口的位置。
有没有办法实现这个?
答案 0 :(得分:1)
如何重置之前的转换并保留自己的“比例”值,您可以检查“最大比例”和“最小比例”,如下所示:
double scale = 1.0;
double minScale = 0.5;
double maxScale = 2.0;
private void image_MouseWheel(object sender, MouseWheelEventArgs e)
{
// back to normal (maybe this isn't needed since we're making a new one below anyway)
CctvImage.RenderTransform = null;
var position = e.MouseDevice.GetPosition(CctvImage);
if (e.Delta > 0)
scale += 0.1;
else
scale -= 0.1;
if (scale > maxScale)
scale = maxScale;
if (scale < minScale)
scale = minScale;
CctvImage.RenderTransform = new ScaleTransform(scale, scale, position.X, position.Y);
}
答案 1 :(得分:0)
我想你想阻止Image
从原来的尺寸缩小,对吧?然后你应该确保比例永远不会低于1
:
double currentScale = 1.0;
private void onMouseWheel_Scroll(object sender, MouseWheelEventArgs e)
{
var position = e.MouseDevice.GetPosition(CctvImage);
var renderTransformValue = CctvImage.RenderTransform.Value;
if (e.Delta > 0)
{
currentScale += 0.1;
}
else if (e.Delta < 0)
{
currentScale -= 0.1;
if (currentScale < 1.0)
currentScale = 1.0;
}
CctvImage.RenderTransform = new ScaleTransform(currentScale, currentScale, position.X, position.Y);
}