在Telerik for silverlight控件radtreeview、textBox、RadGridView中实现拖拉控件的操作

效果图:



1.首先构造实体类Team

  1. public class Team  
  2.     {  
  3.         public Team(string name)  
  4.         {  
  5.             this.Name = name;  
  6.         }  
  7.   
  8.         public string Name { getset; }  
  9.     }  

2.构造实体类

  1. public class Division  
  2.    {  
  3.        public Division(string name)  
  4.        {  
  5.            this.Name = name;  
  6.            this.Teams = new ObservableCollection<Team>();  
  7.        }  
  8.   
  9.        public string Name { getset; }  
  10.   
  11.        public ObservableCollection<Team> Teams { getset; }  
  12.    }  

3.构造实体类League

  1. public class League  
  2.     {  
  3.         public League(string name)  
  4.         {  
  5.             this.Name = name;  
  6.             this.Divisions = new ObservableCollection<Division>();  
  7.         }  
  8.         public string Name  
  9.         {  
  10.             get;  
  11.             set;  
  12.         }  
  13.         public ObservableCollection<Division> Divisions  
  14.         {  
  15.             get;  
  16.             set;  
  17.         }  
  18.   
  19.     }  

4.构造一个提供数据的类RadTreeViewSampleData

  1. public class RadTreeViewSampleData  
  2.     {  
  3.         public RadTreeViewSampleData()  
  4.         {  
  5.             this.InitializeLeaguesDataSource();  
  6.         }  
  7.         public ObservableCollection<League> LeaguesDataSource  
  8.         {  
  9.             get;  
  10.             set;  
  11.         }  
  12.         private void InitializeLeaguesDataSource()  
  13.         {  
  14.             this.LeaguesDataSource = new ObservableCollection<League>();  
  15.             League l;  
  16.             Division d;  
  17.             this.LeaguesDataSource.Add(l = new League("League A"));  
  18.             l.Divisions.Add((d = new Division("Division A")));  
  19.             d.Teams.Add(new Team("Team I"));  
  20.             d.Teams.Add(new Team("Team II"));  
  21.             d.Teams.Add(new Team("Team III"));  
  22.             d.Teams.Add(new Team("Team IV"));  
  23.             d.Teams.Add(new Team("Team V"));  
  24.             l.Divisions.Add((d = new Division("Division B")));  
  25.             d.Teams.Add(new Team("Team Blue"));  
  26.             d.Teams.Add(new Team("Team Red"));  
  27.             d.Teams.Add(new Team("Team Yellow"));  
  28.             d.Teams.Add(new Team("Team Green"));  
  29.             d.Teams.Add(new Team("Team Orange"));  
  30.             l.Divisions.Add((d = new Division("Division C")));  
  31.             d.Teams.Add(new Team("Team East"));  
  32.             d.Teams.Add(new Team("Team West"));  
  33.             d.Teams.Add(new Team("Team North"));  
  34.             d.Teams.Add(new Team("Team South"));  
  35.             this.LeaguesDataSource.Add(l = new League("League B"));  
  36.             l.Divisions.Add((d = new Division("Division A")));  
  37.             d.Teams.Add(new Team("Team 1"));  
  38.             d.Teams.Add(new Team("Team 2"));  
  39.             d.Teams.Add(new Team("Team 3"));  
  40.             d.Teams.Add(new Team("Team 4"));  
  41.             d.Teams.Add(new Team("Team 5"));  
  42.             l.Divisions.Add((d = new Division("Division B")));  
  43.             d.Teams.Add(new Team("Team Diamond"));  
  44.             d.Teams.Add(new Team("Team Heart"));  
  45.             d.Teams.Add(new Team("Team Club"));  
  46.             d.Teams.Add(new Team("Team Spade"));  
  47.             l.Divisions.Add((d = new Division("Division C")));  
  48.             d.Teams.Add(new Team("Team Alpha"));  
  49.             d.Teams.Add(new Team("Team Beta"));  
  50.             d.Teams.Add(new Team("Team Gamma"));  
  51.             d.Teams.Add(new Team("Team Delta"));  
  52.             d.Teams.Add(new Team("Team Epsilon"));  
  53.         }  
  54.   
  55.     }  

5.定义页面

<UserControl.Resources>
        <sampleData:RadTreeViewSampleData x:Key="DataSource"/>

        <DataTemplate x:Key="Team">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>

        <telerik:HierarchicalDataTemplate x:Key="Division"
       ItemsSource="{Binding Teams}"
       ItemTemplate="{StaticResource Team}">
            <TextBlock Text="{Binding Name}"/>
        </telerik:HierarchicalDataTemplate>

        <telerik:HierarchicalDataTemplate x:Key="League"
       ItemsSource="{Binding Divisions}"
       ItemTemplate="{StaticResource Division}">
            <TextBlock Text="{Binding Name}"/>
        </telerik:HierarchicalDataTemplate>

        <DataTemplate x:Key="ListBoxDataTemplate">
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>

    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White" Margin="8">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="120"/>
            <ColumnDefinition Width="100"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <TextBlock Text="RadTreeView" FontSize="16" Margin="5"
               VerticalAlignment="Bottom" />
        <TextBlock Text="TextBox" FontSize="16" Grid.Column="1" VerticalAlignment="Bottom"
               Margin="5" />
        <TextBlock Text="RadGridView" FontSize="16" Grid.Column="2" VerticalAlignment="Bottom"
               Margin="5" />

        <telerik:RadTreeView x:Name="radTreeView" IsDragDropEnabled="True" Margin="0,8,0,0"
       IsDragTooltipEnabled="False" Grid.Row="1"
       ItemsSource="{Binding Source={StaticResource DataSource}, Path=LeaguesDataSource}"
       ItemTemplate="{StaticResource League}"/>

        <TextBox x:Name="textBox" Grid.Column="1" Grid.Row="1"
       VerticalAlignment="Top" HorizontalAlignment="Left" Width="90" Margin="0,8,0,0"/>

        <telerik:RadGridView x:Name="radGridView" Grid.Column="2" Grid.Row="1"
         Height="280" Margin="0,8,8,0"
       VerticalAlignment="Top" AutoGenerateColumns="False"
       ItemsSource="{Binding Source={StaticResource DataSource}, Path=EmptyTeamDataSource}" SelectionChanged="radGridView_SelectionChanged">
            <telerik:RadGridView.Columns>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Id}"/>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Name}"/>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding ImageUrl}"/>
            </telerik:RadGridView.Columns>
        </telerik:RadGridView>
    </Grid>

6.定义变量与构造函数,其中设置textbox,radgridView允许拖拉并绑定drop的命令

 private ObservableCollection<Team> aaa=new ObservableCollection<Team>(); 

        public Tree2()
        {
            InitializeComponent();
            //radGridView.
            RadDragAndDropManager.SetAllowDrop(textBox, true);
            RadDragAndDropManager.SetAllowDrop(radGridView, true);
            RadDragAndDropManager.AddDropQueryHandler(textBox, new EventHandler<DragDropQueryEventArgs>(this.TextBox_OnDropQuery));
            RadDragAndDropManager.AddDropInfoHandler(textBox, new EventHandler<DragDropEventArgs>(this.TextBox_OnDropInfo));
            RadDragAndDropManager.AddDropQueryHandler(radGridView, new EventHandler<DragDropQueryEventArgs>(this.RadGridView_OnDropQuery));
            RadDragAndDropManager.AddDropInfoHandler(radGridView, new EventHandler<DragDropEventArgs>(this.RadGridView_OnDropInfo)); 
        }


7.drop的相关逻辑

   private void TextBox_OnDropQuery(object sender, DragDropQueryEventArgs e)
        {
            e.QueryResult = true;
            e.Options.ArrowCue = RadDragAndDropManager.GenerateArrowCue();
        }

        private void TextBox_OnDropInfo(object sender, DragDropEventArgs e)
        {
            if (e.Options.Status == DragStatus.DropComplete)
            {
                object item = (e.Options.Payload as Collection<Object>)[0];
                PropertyInfo info = item.GetType().GetProperty("Name");
                textBox.Text = info == null ? String.Empty : info.GetValue(item, null).ToString();
            }
        }

        private void RadGridView_OnDropQuery(object sender, DragDropQueryEventArgs e)
        {
            e.QueryResult = true;
        }

        private void RadGridView_OnDropInfo(object sender, DragDropEventArgs e)
        {
            if (e.Options.Status == DragStatus.DropComplete)
            {
                foreach (object dropItem in e.Options.Payload as Collection<Object>)
                {
                    Team team = dropItem as Team;
                    if (team != null)
                    {
                        aaa.Add(team);
                    }
                    this.radGridView.ItemsSource = aaa;
                        //(this.radGridView.ItemsSource as ObservableCollection<Team>).Add(team);
                }
            }
        }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值