Una de las nuevas funcionalidades que nos traerá Silverlight 4 es la característica Drag & Drop. Hoy en día los usuarios entienden como algo natural las acciones de Drag & Drop. Ahora cualquier control que derive de UIElement viene con los eventos DragEnter, DragLeave, DragOver y Drop, ya no tenemos que crearnos nuestro manejador de drag & drop con los eventos MouseLeftButtonDown, MouseMove y MouseLeftButtonUp, lo cual era un engorro y nada elegante.
Una de las acciones mas clásicas que se pueden realizar en Silverlight con Drag & Drop es arrastrar una imagen de nuestro explorador de ficheros a un elemento de nuestra aplicación Web, es una acción mas natural que lo que teníamos que hacer antes. Vamos a ver con un ejemplo como se realizaría
A un objeto Canvas vamos a permitir realizar al usuario que arrastre un archivo de imagen y esta se visualice en el Canvas
1: <Canvas x:Name="DropCanvas" AllowDrop="True" Drop="DropCanvas_Drop" >
Con esto ya permitimos que se pueda realizar el Drop y tenemos el evento, solo nos falta tratarlo
1: private void DropCanvas_Drop(object sender, DragEventArgs e)
2: {
3: IDataObject dataObject = e.Data;
4: Point dropPoint = e.GetPosition(DropCanvas);
5: if (dataObject.GetDataPresent(DataFormats.FileDrop))
6: {
7: FileInfo[] files = (FileInfo[])dataObject.GetData(DataFormats.FileDrop);
8:
9: if (files.Length > 0)
10: {
11: if (files[0].Extension == ".jpg")
12: {
13:
14: System.Windows.Media.Imaging.BitmapImage bitmapImage =
15: new System.Windows.Media.Imaging.BitmapImage();
16: bitmapImage.SetSource(files[0].OpenRead());
17: Image newImage = new Image();
18: newImage.Source = bitmapImage;
19: newImage.Width = 200;
20: newImage.Height = 200;
21:
22: newImage.SetValue(Canvas.TopProperty, dropPoint.Y);
23: newImage.SetValue(Canvas.LeftProperty, dropPoint.X);
24:
25: newImage.Stretch = Stretch.Uniform;
26: DropCanvas.Children.Add(newImage);
27: }
28: }
29: }
30: }
31:
Como podéis ver muy sencillo