Silverlight的版本不断更新.当然有些很不错的功能和属性添加进来并进一步得到完善. 例如拖拽. 在Silverlight 3.0版本以前是不直接支持拖拽效果. 同样在Ria运用中我也对比一个Flex实现拖拽方式,这是一个像StartDrag静态方法的类,你只需要提供一个 UIComponent对象 ,DragManager就会创建一个微小的透明图像跟随鼠标,跟随鼠标的图像经过组件 上时会很形像的表明是否允许接受拖拽对象. 实现拖拽效果.
在Silverlight 3.0中做过拖拽效果应该知道,当你分析了Drag拖拽效果步骤. 在silverlight 3.0以前中实现的 难点核心是如何保持生成的代理形象与鼠标进行同步. 而 在4.0中大大增强了控件之间的拖拽行为.现在在Silverlight 4中,针对所有的UIElement对象,增加了一个AllowDrop属性 设置为True,我们甚至可以把实体档案拖曳到浏览器上正在执行的Silverlight应用程序中.相比3.0 足以激动人心. 转入正题Silverlight 4下拖拽效果实现.
实现效果: 从一个ListBox某一个子项移动到另外一个ListBox中.
A:在拖放控件之前添加一个Toolkit空间引用:
1 xmlns:toolKit="clr-namespace:System.windows.Controls;assembly=System.windows.Controls.Toolkit">B:拖入第一个ListBox.注意是包含在toolKit:ListBoxDragDropTarget 控件 中,并设置 AllowDrop ="True"
1 < toolKit:ListBoxDragDropTarget AllowDrop ="True" >2 < ListBox x:name ="customerListBoxMain" Height ="200" WIDth ="200"
3 displayMemberPath ="name" >
4 < ListBox.ItemsPanel >
5 < ItemsPanelTemplate >
6 < StackPanel OrIEntation ="Vertical" />
7 </ ItemsPanelTemplate >
8 </ ListBox.ItemsPanel >
9 </ ListBox >
10 </ toolKit:ListBoxDragDropTarget >
其实在去年Silverlight 4.0还是Beta版本时. 这个AllowDrop并没有被直接作为ListBoxDragDropTarget 属性来定义.silverlight 4.0 Beta版本实现AllowDrop是通过引用空间:
1 xmlns:mswindows="clr-namespace:Microsoft.windows;assembly=System.windows.Controls.Toolkit"在定义toolKit:ListBoxDragDropTarget 控件设置属性为mswindows 下的DragDrop.AllowDrop ="True".当然4.0正式版后不用这么做 则直接通过在每个UIElement中设置Bool类型AllowDrop属性,更加简便
1 < toolkit:ListBoxDragDropTarget mswindows:DragDrop.AllowDrop ="True" > <!-- 包含ListBox控件 --> </ toolkit:ListBoxDragDropTarget >C:拖入第二个接受ListBox基本可第一个雷同:
1 < toolKit:ListBoxDragDropTarget AllowDrop ="True" >2 < ListBox x:name ="AcceptListBox" Height ="200" WIDth ="200" displayMemberPath ="name" >
3 < ListBox.ItemsPanel >
4 < ItemsPanelTemplate >
5 < StackPanel OrIEntation ="Vertical" />
6 </ ItemsPanelTemplate >
7 </ ListBox.ItemsPanel >
8 </ ListBox >
9 </ toolKit:ListBoxDragDropTarget >
D:绑定数据源.为了达到演示Drag效果的演示目的,定义一个Person类.类中只有一个属性name.
1 public class Person2 {
3 public string name { get ; set ; }
4 }
通过在PersonDataProvIDer类中定义一个方法提供一个ObservableCollection<Person>集合数据.绑定到第一个[customerListBoxMain ]ListBox中.
代码 1 public class PersonDataProvIDer2 {
3 public static ObservableCollection < Person > GetData()
4 {
5 return new ObservableCollection < Person >
6 {
7 new Person { name = " Akash Sharma " },
8 new Person { name = " Vinay Sen " },
9 new Person { name = " Lalit Narayan " },
10 new Person { name = " Madhumita Chatterjee " },
11 new Person { name = " Priyanka Patil " },
12 new Person { name = " Kumar Sanu " },
13 new Person { name = " Victor Kapoor " },
14 new Person { name = " Shymal Sen " },
15 new Person { name = " Alan D'Souza " },
16 new Person { name = " Kamal Saha " },
17 new Person { name = " Alex Chan " },
18 new Person { name = " Rohit Sharma " },
19 new Person { name = " Dipti Sen " },
20 new Person { name = " Dinesh Sharma " },
21 new Person { name = " Kamal Kapoor " },
22 new Person { name = " Raj Kapoor " },
23 new Person { name = " Deepa Karmakar " },
24 new Person { name = " Sarmishtha Chakrobarty " },
25 new Person { name = " Pranab Kumar Debnath " },
26 new Person { name = " Hiral grover " },
27 new Person { name = " Munmun Patel " },
28 new Person { name = " Santosh Kumar Sen " },
29 new Person { name = " Sandeep Debnath " }
30 };
31 }
32 }
MainPage后台中进行数据绑定:
1 public MainPage()2 {
3 InitializeComponent();
4 customerListBoxMain.ItemsSource = PersonDataProvIDer.GetData();
6 }
绑定完成后.编译通过开始运行 先看看效果.
ok.silverlight 4.0中实现拖拽如此简单.当使用了ListBoxDragDropTarget控件后
总结以上是内存溢出为你收集整理的WPF拖拽效果实现全部内容,希望文章能够帮你解决WPF拖拽效果实现所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)