visual tutorial studio que puede programacion presentacion hacer espaƱol ejemplos con animaciones c# wpf drag-and-drop

c# - tutorial - Arrastra y suelta una imagen en WPF



wpf presentacion (2)

Desea establecer las propiedades Izquierda y Superior del lienzo en algo que no sea la posición inicial. En el manejador de MouseMove, debe obtener la posición relativa al padre. También; asegúrese de que el elemento principal sea un lienzo y no una cuadrícula. Tiene un margen izquierdo y un margen superior bastante grande en la imagen, así como un control con el nombre de variable "theGrid".

Estoy tratando de arrastrar y soltar una imagen de un lugar en el lienzo a otro (debería ser relativamente simple), pero no puedo entenderlo. La imagen que quiero mover tiene el siguiente XAML:

<Image Height="28" HorizontalAlignment="Left" Margin="842,332,0,0" Name="cityImage" Stretch="Fill" VerticalAlignment="Top" Width="42" Source="/Settlers;component/Images/city.png" MouseLeftButtonDown="cityImage_MouseLeftButtonDown" MouseMove="cityImage_MouseMove" MouseLeftButtonUp="cityImage_MouseLeftButtonUp"/>

El código es el siguiente:

bool isDragging = false; Point initMousePos; private void cityImage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { isDragging = true; initMousePos = e.GetPosition(theGrid); } private void cityImage_MouseMove(object sender, MouseEventArgs e) { if (isDragging) { Image image = sender as Image; Canvas.SetTop(image, initMousePos.X); Canvas.SetLeft(image, initMousePos.Y); image.Visibility = System.Windows.Visibility.Visible; } }

private void cityImage_MouseLeftButtonUp (remitente del objeto, MouseButtonEventArgs e) {isDragging = false; }


Lo que hago para lograr lo que quieres es usar

System.Windows.Controls.Primitives.Thumb

como la raíz de un UserControl y establecer ControlTemplate para mostrar una imagen (dentro de un borde, pero debería funcionar también sin ella), algo como:

<Thumb Name="myRoot" DragDelta="MyRootDragDelta"> <Thumb.Template> <ControlTemplate> <Image ... > ... see below ... </Image> </ControlTemplate> </Thumb.Template> </Thumb>

Además, vinculo la fuente de la imagen a una propiedad de la clase:

<Image.Source> <Binding Path="ImageSource" RelativeSource= {RelativeSource FindAncestor, AncestorType=my:MyImageControl, AncestorLevel=1}" /> </Image.Source>

El UserControl tiene un nombre TranslateTransform (digamos translateTransform ) cuyas propiedades X e Y deben establecerse en el controlador de eventos DragDelta :

private void MyRootDragDelta(object sender, DragDeltaEventArgs e) { translateTransform.X += e.HorizontalChange; translateTransform.Y += e.VerticalChange; }

No te olvides de agregar:

public ImageSource ImageSource { get; set; }

Espero que esto ayude. Si algo no está claro, no dude en preguntar más.