2014-12-29 37 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; 
}