[Toolkit]最新Silverlight Toolkit中的Drag&Drop支持-阿里云开发者社区

开发者社区> 技术小甜> 正文

[Toolkit]最新Silverlight Toolkit中的Drag&Drop支持

简介:
+关注继续查看


我在昨天的文章中介绍了Silverlight Toolkit最新更新的一些情况,其中最令人兴奋的就是其拖拽(Drag&Drop)操作的支持。

由于项目原因,我还未安装toolkit的十月份更新,所以也没法写一些亲身体验式的文章。这里就只能翻译一下Tim Heuer大神的相关文章给大家喽。

原文链接:http://timheuer.com/blog/archive/2009/10/19/silverlight-toolkit-adds-drag-drop-support.aspx

Silverlight Toolkit 2009年10月更新中带来的很多新特性,其中最爽就要数其对一些核心控件提供的拖拽操作支持了。看到这里你可能在想:“恩,很好,又有新控件了要学了”。其实你错了,没有什么新控件,也不需要额外的学习使用它们。如你所愿,现在有了toolkit的帮助,这类拖动操作并不需要写多少代码(译注:或者说只需标记,不需代码)。

现在让我们做一个最简单的例子:将ListBox中的某项移动到另外一个ListBox中。用Blend拖一个ListBox进去,更改一些属性后得到如下XAML:

    <StackPanel Orientation="Horizontal" Margin="10">
        <ListBox Width="200" Height="500" x:Name="FromBox" DisplayMemberPath="FullName"/> 
        <ListBox Width="200" Height="500" x:Name="ToBox" DisplayMemberPath="FullName"/> 
    </StackPanel>

在后置代码中,我搞了一个很简单的People类。它的GetListOfPeople()方法返回ObserveableCollection<Person>集合,然后将其绑定到FromBox上。代码如下:

using System.Collections.ObjectModel;
namespace SilverlightApplication105 {
    public class People {
        public static ObservableCollection<Person> GetListOfPeople() {
            ObservableCollection<Person> ppl = new ObservableCollection<Person>();
            for (int i = 0; i < 15; i++) {
                Person p = new Person() {
                    Firstname = "First " + i.ToString(),
                    Lastname = "Last " + i.ToString()
                };
                ppl.Add(p);
            }
            return ppl;
        }
    }
    public class Person { 
        public string Firstname { get; set; }
        public string Lastname { get; set; } 
        public string FullName { 
            get { return string.Concat(Firstname, " ", Lastname); } 
        }
    }
}

MainPage.xaml.cs中的代码如下:

using System.Windows;
using System.Windows.Controls;
namespace SilverlightApplication105 {
    public partial class MainPage : UserControl {
        public MainPage() {
            InitializeComponent();
            Loaded += new RoutedEventHandler(MainPage_Loaded);
        }
        void MainPage_Loaded(object sender, RoutedEventArgs e) {
            FromBox.ItemsSource = People.GetListOfPeople();
        }
    }
}
 

以前我们处理这类拖拽操作的,就必须在代码中进行针对列表项的索引、移动规则的控制。现在好了,我们只需添加一个Silverlight Toolkit中程序集System.Windows.Controls.Toolkit的引用即可。以下是处理过后的XAML:

 <UserControl 
     x:Class="SilverlightApplication105.MainPage"   
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"    
     mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"   
     xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"   
     xmlns:mswindows="clr-namespace:Microsoft.Windows;assembly=System.Windows.Controls.Toolkit">
    <Grid x:Name="LayoutRoot">
        <StackPanel Orientation="Horizontal" Margin="10">
            <ListBox Width="200" Height="500" x:Name="FromBox" DisplayMemberPath="FullName"/> 
            <ListBox Width="200" Height="500" x:Name="ToBox" DisplayMemberPath="FullName"/> 
        </StackPanel> 
    </Grid> 
</UserControl>

这里要注意一下声明的xmlns:toolkit和xmlns:mswindows。现在我们可以简单的将ListBox控件用ListBoxDropTarget控件包裹起来:

<StackPanel Orientation="Horizontal" Margin="10">
    <toolkit:ListBoxDragDropTarget mswindows:DragDrop.AllowDrop="True">
        <ListBox Width="200" Height="500" x:Name="FromBox" DisplayMemberPath="FullName"/> 
    </toolkit:ListBoxDragDropTarget> 
    <toolkit:ListBoxDragDropTarget mswindows:DragDrop.AllowDrop="True">
        <ListBox Width="200" Height="500" x:Name="ToBox" DisplayMemberPath="FullName"/> 
    </toolkit:ListBoxDragDropTarget> 
</StackPanel>

接下来我们将程序运行起来看看成果。是的,只需一行标记我们就已经拥有了将一个list项拖动到另外一个list中的功能!

ListBoxDragDropTarget image sample

牛X吧?不仅如此,我们还可以对列表项的顺序进行重排,也就是说一个ListBox同时可以是拖动的起点和终点。不过,ListBoxDragDropTarget并不能作用于virtualized容器(ListBox默认容器)。所以我们必须改变ListBox的ItemsPanelTemplate,比如说像这样加个StackPanel进去:

<toolkit:ListBoxDragDropTarget mswindows:DragDrop.AllowDrop="True">
    <ListBox Width="200" Height="500" x:Name="FromBox" DisplayMemberPath="FullName">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel/> 
            </ItemsPanelTemplate> 
        </ListBox.ItemsPanel> 
    </ListBox> 
</toolkit:ListBoxDragDropTarget>

 

现在我们就可以通过drag/drop行为对ListBox中的项目进行重新排列了

reorder sample image

更牛X的是,它支持任意的DataTemplate。比如我在Person类中增加一个Image属性并将其作用于控件的template,拖拽操作仍然成立!

complex template sample image

如上图所示,两个ListBox的DataTemolate并不相同,我们可以将FromBox的DataTemplate搞得很复杂,同时又让ToBox只处理类中的某个属性。

点击这里围观在线实例

dragdropanimated.gif

而且而且而且,除了ListBoxDragDropTarget外,我们还拥有

  • ListBoxDragDropTarget
  • TreeViewDragDropTarget
  • DataGridDragDropTarget
  • DataPointSeriesDragDropTarget

好了,就到这,enjoy~









本文转自紫色永恒51CTO博客,原文链接: http://www.cnblogs.com/024hi/archive/2009/10/21/1587690.html,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用NAT网关轻松为单台云服务器设置多个公网IP
在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。
26797 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10095 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
9161 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13893 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
4664 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
4510 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7365 0
+关注
10146
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载