在画布上放大-C#

在画布上放大-C#,c#,image,canvas,zooming,C#,Image,Canvas,Zooming,我目前有一个画布,我在我的程序中加载了一个图像,我希望能够右键单击该图像上的某个点,然后单击“放大”以放大该点 我找到的一个解决方案是: <Canvas> <Canvas.RenderTransform> <ScaleTransform ScaleX="2" ScaleY="2"> </Canvas.RenderTransform> </Canvas> 这是可行的,但是它不会放大到特定的坐标,而只

我目前有一个画布,我在我的程序中加载了一个图像,我希望能够右键单击该图像上的某个点,然后单击“放大”以放大该点

我找到的一个解决方案是:

<Canvas>
    <Canvas.RenderTransform>
         <ScaleTransform ScaleX="2" ScaleY="2">
    </Canvas.RenderTransform>
</Canvas>


这是可行的,但是它不会放大到特定的坐标,而只是放大到图像的左上角。如何实现坐标缩放?放大特定坐标?

使用三个单独的变换。移动画布以使单击点成为原点的方法之一。第二个变换用于缩放,第三个变换用于再次将单击点放回中心

<Canvas.RenderTransform>
  <TransformGroup>
    <TranslateTransform X="0" Y="0" />
    <ScaleTransform ScaleX="1" ScaleY="1" />
    <TranslateTransform X="0" Y="0" />
  </TransformGroup>
</Canvas.RenderTransform>


private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{
    Point p = e.GetPosition(this);

    var transformGroup = ImageCanvas.RenderTransform as TransformGroup;
    var moveToOriginTransform = transformGroup.Children[0] as TranslateTransform;
    var scaleTransform = transformGroup.Children[1] as ScaleTransform;
    var moveBackTransform = transformGroup.Children[2] as TranslateTransform;

    moveToOriginTransform.X = -p.X;
    moveToOriginTransform.Y = -p.Y;

    scaleTransform.ScaleX += 1;
    scaleTransform.ScaleY += 1;

    moveBackTransform.X = p.X;
    moveBackTransform.Y = p.Y;
}

私有void Image_MouseDown(对象发送器,MouseButtonEventArgs e)
{
点p=e.GetPosition(本);
var transformGroup=ImageCanvas.RenderTransform作为transformGroup;
var moveToOriginTransform=transformGroup.Children[0]作为TranslateTransform;
var scaleTransform=transformGroup.Children[1]作为scaleTransform;
var moveBackTransform=transformGroup.Children[2]作为TranslateTransform;
moveToOriginTransform.X=-p.X;
moveToOriginTransform.Y=-p.Y;
scaleTransform.ScaleX+=1;
scaleTransform.ScaleY+=1;
moveBackTransform.X=p.X;
moveBackTransform.Y=p.Y;
}