01 | <Window x:Class= "WpfApplication1.MainWindow" |
03 | xmlns:x= "http://schemas.microsoft.com/winfx/2006/xaml" |
04 | Title= "MainWindow" Height= "350" Width= "525" > |
05 | |
06 | <Grid> |
07 | <Grid.ColumnDefinitions> |
08 | <ColumnDefinition Width= "210" ></ColumnDefinition> |
09 | <ColumnDefinition></ColumnDefinition> |
10 | </Grid.ColumnDefinitions> |
11 |
12 | <ListView x:Name= "listView1" Grid.Column= "0" AllowDrop= "True" |
13 | PreviewMouseLeftButtonDown= "listView1_PreviewMouseLeftButtonDown" |
14 | PreviewMouseMove= "listView1_PreviewMouseMove" > |
15 | <ListViewItem> |
16 | <Image Source= "Resources\Images\a01.jpg" ></Image> |
17 | </ListViewItem> |
18 | <ListViewItem> |
19 | <Image Source= "Resources\Images\a02.jpg" ></Image> |
20 | </ListViewItem> |
21 | <ListViewItem> |
22 | <Image Source= "Resources\Images\a03.jpg" ></Image> |
23 | </ListViewItem> |
24 | <ListViewItem> |
25 | <Image Source= "Resources\Images\a04.jpg" ></Image> |
26 | </ListViewItem> |
27 | </ListView> |
28 | |
29 | <Canvas x:Name= "canvas1" Grid.Column= "1" AllowDrop= "True" |
30 | Drop= "canvas1_Drop" DragEnter= "canvas1_DragEnter" Background= "Red" > |
31 | </Canvas> |
32 | </Grid> |
33 |
34 | </Window> |
01 | using System; |
02 | using System.Collections.Generic; |
03 | using System.Linq; |
04 | using System.Text; |
05 | using System.Windows; |
06 | using System.Windows.Controls; |
07 | using System.Windows.Data; |
08 | using System.Windows.Documents; |
09 | using System.Windows.Input; |
10 | using System.Windows.Media; |
11 | using System.Windows.Media.Imaging; |
12 | using System.Windows.Navigation; |
13 | using System.Windows.Shapes; |
14 | using System.Data; |
15 |
16 | namespace WpfApplication1 |
17 | { |
18 | /// <summary> |
19 | /// Interaction logic for MainWindow.xaml |
20 | /// </summary> |
21 | public partial class MainWindow : Window |
22 | { |
23 | Point startPoint; |
24 | ListBoxItem contact; |
25 |
26 | public MainWindow() |
27 | { |
28 | InitializeComponent(); |
29 | } |
30 |
31 | private static T FindAnchestor<T>(DependencyObject current) where T : DependencyObject |
32 | { |
33 | do |
34 | { |
35 | if (current is T) |
36 | { |
37 | return (T)current; |
38 | } |
39 | current = VisualTreeHelper.GetParent(current); |
40 | } |
41 | while (current != null ); |
42 |
43 | return null ; |
44 | } |
45 |
46 | private void listView1_PreviewMouseLeftButtonDown( object sender, MouseButtonEventArgs e) |
47 | { |
48 | startPoint = e.GetPosition( null ); |
49 | } |
50 |
51 | private void listView1_PreviewMouseMove( object sender, MouseEventArgs e) |
52 | { |
53 | Point mousPos = e.GetPosition( null ); |
54 | Vector diff = startPoint - mousPos; |
55 |
56 | if ((e.LeftButton == MouseButtonState.Pressed) && (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance) && (Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)) |
57 | { |
58 | ListViewItem listViewItem = FindAnchestor<ListViewItem>((DependencyObject)e.OriginalSource); |
59 | if (listViewItem == null ) { return ; } |
60 |
61 | ListView listView = sender as ListView; |
62 | contact = (ListViewItem)listView.ItemContainerGenerator.ItemFromContainer(listViewItem); |
63 | DataObject dataObject = new DataObject( "MyFormat" , contact); |
64 | DragDrop.DoDragDrop(listViewItem, dataObject, DragDropEffects.Move); |
65 | } |
66 | } |
67 |
68 | private void canvas1_Drop( object sender, DragEventArgs e) |
69 | { |
70 | if (e.Data.GetDataPresent( "MyFormat" )) |
71 | { |
72 | contact = e.Data.GetData( "MyFormat" ) as ListBoxItem; |
73 | Canvas CanvasView = sender as Canvas; |
74 | this .listView1.Items.Remove(contact); |
75 | CanvasView.Children.Add(contact); |
76 | } |
77 | } |
78 |
79 | private void canvas1_DragEnter( object sender, DragEventArgs e) |
80 | { |
81 | if (!(e.Data.GetDataPresent( "contact" )) || (sender == e.Source)) |
82 | { |
83 | e.Effects = DragDropEffects.None; |
84 | } |
85 | } |
86 | } |
87 | } |
参考阅读:
Drag and Drop in WPF