<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="210"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<ListView x:Name="listView1" Grid.Column="0" AllowDrop="True"
PreviewMouseLeftButtonDown="listView1_PreviewMouseLeftButtonDown"
PreviewMouseMove="listView1_PreviewMouseMove">
<ListViewItem>
<Image Source="Resources\Images\a01.jpg"></Image>
</ListViewItem>
<ListViewItem>
<Image Source="Resources\Images\a02.jpg"></Image>
</ListViewItem>
<ListViewItem>
<Image Source="Resources\Images\a03.jpg"></Image>
</ListViewItem>
<ListViewItem>
<Image Source="Resources\Images\a04.jpg"></Image>
</ListViewItem>
</ListView>
<Canvas x:Name="canvas1" Grid.Column="1" AllowDrop="True"
Drop="canvas1_Drop" DragEnter="canvas1_DragEnter" Background="Red">
</Canvas>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Point startPoint;
ListBoxItem contact;
public MainWindow()
{
InitializeComponent();
}
private static T FindAnchestor<T>(DependencyObject current) where T : DependencyObject
{
do
{
if (current is T)
{
return (T)current;
}
current = VisualTreeHelper.GetParent(current);
}
while (current != null);
return null;
}
private void listView1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
startPoint = e.GetPosition(null);
}
private void listView1_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point mousPos = e.GetPosition(null);
Vector diff = startPoint - mousPos;
if ((e.LeftButton == MouseButtonState.Pressed) && (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance) && (Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance))
{
ListViewItem listViewItem = FindAnchestor<ListViewItem>((DependencyObject)e.OriginalSource);
if (listViewItem == null) { return; }
ListView listView = sender as ListView;
contact = (ListViewItem)listView.ItemContainerGenerator.ItemFromContainer(listViewItem);
DataObject dataObject = new DataObject("MyFormat", contact);
DragDrop.DoDragDrop(listViewItem, dataObject, DragDropEffects.Move);
}
}
private void canvas1_Drop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("MyFormat"))
{
contact = e.Data.GetData("MyFormat") as ListBoxItem;
Canvas CanvasView = sender as Canvas;
this.listView1.Items.Remove(contact);
CanvasView.Children.Add(contact);
}
}
private void canvas1_DragEnter(object sender, DragEventArgs e)
{
if (!(e.Data.GetDataPresent("contact")) || (sender == e.Source))
{
e.Effects = DragDropEffects.None;
}
}
}
}
参考阅读:
Drag and Drop in WPF
浙公网安备 33010602011771号