2014-12-29 40 views
1

我目前有一个画布,可以在我的程序中加载图像,我希望能够右键单击该图像上的某个点,然后单击放大以放大那一点。放大画布 - C#

一个解决方案,我发现是:

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

然而,这工作不放大到特定的坐标,而是仅仅将放大到左上的形象。我将如何实现坐标缩放?放大特定坐标?

回答

0

使用三个独立的变换。一个移动画布,使点击点成为原点。第二次转换为缩放,第三次将点击返回到中心

<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; 
}