WPF 拖拽功能
来源:互联网 发布:神经元算法机器人 编辑:程序博客网 时间:2024/05/16 17:48
WPF 拖拽功能
Posted on 2010-08-11 21:36 卞红军 阅读(616)评论(0) 编辑 收藏01
<Window x:Class=
"WpfApplication1.MainWindow"
02
xmlns=
"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
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
http://www.wpftutorial.net/DragAndDrop.html
- WPF 拖拽功能
- WPF实现拖拽功能
- wpf 的拖拽功能实现(含拖拽复制功能实现)
- WPF换肤皮功能
- WPF拖放功能实现
- WPF拖放功能实现
- WPF拖放功能实现
- WPF编辑器功能截图
- WPF拖放功能实现
- WPF功能区控件
- WPF拖放功能实现
- WPF基础:基本概念和功能
- 禁止WPF的导航功能
- Wpf DataGrid 行双击功能
- WPF TextBox的SpellCheck功能
- wpf listbox 滚动翻页功能
- WPF拖拽效果实现
- WPF实现拖拽方法
- Linux系统启动过程
- LDA vs. PLSI
- ArcGIS中的线性参考/动态分段技术(一):Linear Referencing背景
- 关于ejb的注入
- t卡兼容性解决方法
- WPF 拖拽功能
- SQL Server 2008中的代码安全之二:DDL触发器与登录触发器
- 简单方法导出EXCLE
- iptables禁止某一个ip段访问本机
- DLL和COM的发展过程
- VC 常用的数学函数
- LINUX下常用命令
- 面试算法题(三)
- ArcGIS中的线性参考/动态分段技术(二):LR在ArcGIS Server中的实现原理