簡體   English   中英

如何放大和縮小圖像以及移動所有圖像

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

我在畫布上顯示圖像,並且希望能夠移動所有圖像。 目前,我只能移動畫布上帶的最后一張圖像。 我也希望能夠縮放這些圖像。 請幫助我。

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;

}

您不必使用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