简体   繁体   English

如何放大和缩小图像以及移动所有图像

[英]How I can zoom in & zoom out images and move all images

I display the images on canvas and I want to be able to move all the images. 我在画布上显示图像,并且希望能够移动所有图像。 Currently I am only able to move the last image which I brought on canvas. 目前,我只能移动画布上带的最后一张图像。 I also want to be able to zoom these images. 我也希望能够缩放这些图像。 Please help me in this. 请帮助我。

private TranslateTransform dragTranslation;

// Constructor
void Drag_ManipulationDelta(object sender,ManipulationDeltaRoutedEventArgs e)
{
    // Move the rectangle.

    dragTranslation.X += e.Delta.Translation.X;

    dragTranslation.Y += e.Delta.Translation.Y;
}                                                                      


private void Stickers1_SelectionChanged(object sender,SelectionChangedEventArgs e)
{

    var selecteditem = e.AddedItems[0] as StickersImageListModel;

    Stickers1.Visibility = Visibility.Collapsed;

    Image imageitem = new Image();

    BitmapImage image = new BitmapImage(new System.Uri(selecteditem.Imageurl, UriKind.Absolute));

    imageitem.Source = image;

    my_canvas.Children.Add(imageitem);

    imageitem.AllowDrop = true;

    imageitem.ManipulationMode = ManipulationModes.All;

    imageitem.ManipulationDelta += Drag_ManipulationDelta;

    dragTranslation = new TranslateTransform();

    imageitem.RenderTransform = this.dragTranslation;

    var st = (ScaleTransform)imageitem.RenderTransform;

    double zoom = e.Delta > 0 ? .2 : -.2;

    st.ScaleX += zoom;

    st.ScaleY += zoom;

    my_canvas.Visibility = Visibility.Visible;

}

You dont have to use dragTranslation property 您不必使用dragTranslation属性

void Drag_ManipulationDelta(object sender,ManipulationDeltaRoutedEventArgs e)
{
    // Move the rectangle.

    Image img = sender as Image;
    CompositeTransform ct = img.RenderTransform as CompositeTransform;
    ct.ScaleX *= e.Delta.Scale;
    ct.ScaleY *= e.Delta.Scale;

    if (ct.ScaleX < 1.0) ct.ScaleX = 1.0;
    if (ct.ScaleY < 1.0) ct.ScaleY = 1.0;
    if (ct.ScaleX > 4.0) ct.ScaleX = 4.0;
    if (ct.ScaleY > 4.0) ct.ScaleY = 4.0;
    //Checking with canvas boundary so that image wont go behind canvas
    if ((ct.TranslateX + e.Delta.Translation.X) <= (mycanvas.ActualWidth - img.ActualWidth) && ct.TranslateX + e.Delta.Translation.X>=0)
         ct.TranslateX += e.Delta.Translation.X;
    if ((ct.TranslateY + e.Delta.Translation.Y) <= (mycanvas.ActualHeight - img.ActualHeight) && ct.TranslateY + e.Delta.Translation.Y >= 0)
         ct.TranslateY += e.Delta.Translation.Y;    
} 

private void Stickers1_SelectionChanged(object sender,SelectionChangedEventArgs e)
{        
    ...
    //Using CompositeTransform instead of TranslateTransform
    CompositeTransform ct = new CompositeTransform();
    imageitem.RenderTransform = ct;    
}  

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM