This question is locked. New answers and comments are not allowed.
I have implemented drag&drop like in your example (RadTreeView -> ListBox). This is working but I want not remove element from RTV. Can you help me? Where is the mistake?
Thanks.
MainPage.xaml
MainPage.cs
Thanks.
MainPage.xaml
| <UserControl |
| 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" |
| xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" |
| xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" |
| xmlns:dragDrop="clr-namespace:Telerik.Windows.Controls.DragDrop;assembly=Telerik.Windows.Controls" |
| xmlns:primitives="clr-namespace:Telerik.Windows.Controls.Primitives;assembly=Telerik.Windows.Controls" |
| xmlns:example="clr-namespace:InSEAAtr" |
| x:Class="InSEAAtr.MainPage" |
| mc:Ignorable="d" |
| d:DesignHeight="600" d:DesignWidth="800"> |
| <UserControl.Resources> |
| <LinearGradientBrush x:Key="DropPossibleBackground" StartPoint="0 0" EndPoint="0 1"> |
| <GradientStop Offset="0" Color="White" /> |
| <GradientStop Offset="1" Color="#FFE699" /> |
| </LinearGradientBrush> |
| <telerik:HierarchicalDataTemplate x:Key="CategoryTemplate" ItemsSource="{Binding Items}"> |
| <StackPanel Orientation="Horizontal"> |
| <Image Width="16" Height="16" Source="Images/Icons/AtrValidate16.png" |
| Margin="3" VerticalAlignment="Center" /> |
| <TextBlock Text="{Binding Title}" Margin="2" VerticalAlignment="Center" /> |
| </StackPanel> |
| </telerik:HierarchicalDataTemplate> |
| <DataTemplate x:Name="ProductTemplate"> |
| <telerik:RadDockPanel Margin="2" MaxWidth="200"> |
| <TextBlock Text="{Binding Name}" FontWeight="Bold" telerik:RadDockPanel.Dock="Top" /> |
| <TextBlock Text="{Binding UnitPrice}" Foreground="Green" telerik:RadDockPanel.Dock="Left" /> |
| <TextBlock Text="{Binding Description}" telerik:RadDockPanel.Dock="Left" Margin="2 0 0 0" Foreground="Gray" TextWrapping="Wrap" /> |
| </telerik:RadDockPanel> |
| </DataTemplate> |
| <DataTemplate x:Name="MenuTemplate"> |
| <telerik:RadDockPanel Margin="2" MaxWidth="200"> |
| <TextBlock Text="{Binding Name}" FontWeight="Bold" telerik:RadDockPanel.Dock="Top" /> |
| <TextBlock Text="{Binding Count}" telerik:RadDockPanel.Dock="Left" /> |
| </telerik:RadDockPanel> |
| </DataTemplate> |
| <example:ExampleTemplateSelector x:Key="ExampleTemplateSelector" |
| CategoryTemplate="{StaticResource CategoryTemplate}" |
| ProductTemplate="{StaticResource ProductTemplate}" |
| MenuTemplate="{StaticResource MenuTemplate}"/> |
| </UserControl.Resources> |
| <Grid x:Name="LayoutRoot" > |
| <Grid.RowDefinitions> |
| <RowDefinition Height="30"/> |
| <RowDefinition Height="*"/> |
| </Grid.RowDefinitions> |
| <Border Grid.Row="0"> |
| <Border.Background> |
| <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> |
| <GradientStop Color="#FF828282" Offset="0"/> |
| <GradientStop Color="#FF585858" Offset="1"/> |
| <GradientStop Color="#FF4D4D4D" Offset="0.41"/> |
| <GradientStop Color="#FF232323" Offset="0.431"/> |
| <GradientStop Color="#FF151515" Offset="0.452"/> |
| <GradientStop Color="#FF1B1B1B" Offset="0.469"/> |
| </LinearGradientBrush> |
| </Border.Background> |
| </Border> |
| <StackPanel HorizontalAlignment="Left" Margin="4,4,0,4" Orientation="Horizontal" d:LayoutOverrides="Height"> |
| <telerik:RadButton x:Name="but3" Content="" Margin="0,0,5,0" Width="22"/> |
| <telerik:RadButton x:Name="but4" Content="" Margin="0,0,5,0" Width="22"/> |
| <telerik:RadButton x:Name="but1" Content="" Margin="0,0,5,0" Width="22"/> |
| <telerik:RadButton x:Name="but2" Content="" Margin="0,0,0,0" Width="22"/> |
| </StackPanel> |
| <StackPanel x:Name="spZalogowany" HorizontalAlignment="Center" Margin="0,7" Orientation="Horizontal"> |
| <sdk:Label x:Name="labLogowanie" d:LayoutOverrides="Height" Foreground="White" Content="Zalogowano: "/> |
| <sdk:Label x:Name="labUser" d:LayoutOverrides="Height" Foreground="White" Content="" ToolTipService.ToolTip="Zalogowany użytkownik"/> |
| </StackPanel> |
| <telerik:RadButton x:Name="butWyloguj" Content="Wyloguj" HorizontalAlignment="Right" Margin="0,4,8,4" d:LayoutOverrides="Height"/> |
| <Border Grid.Row="1" Height="30" VerticalAlignment="Top"> |
| <Border.Background> |
| <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> |
| <GradientStop Color="#FF828282" Offset="0"/> |
| <GradientStop Color="#FF585858" Offset="1"/> |
| <GradientStop Color="#FF4D4D4D" Offset="0.41"/> |
| <GradientStop Color="#FF232323" Offset="0.431"/> |
| <GradientStop Color="#FF151515" Offset="0.452"/> |
| <GradientStop Color="#FF1B1B1B" Offset="0.469"/> |
| </LinearGradientBrush> |
| </Border.Background> |
| </Border> |
| <telerik:RadDocking Margin="0,30,0,0" Grid.Row="1" d:LayoutOverrides="Width, Height"> |
| <telerik:RadDocking.DocumentHost> |
| <telerik:RadSplitContainer> |
| <telerik:RadPaneGroup> |
| <telerik:RadPane x:Name="rpGrid" Header="Dokumenty" CanUserClose="False"> |
| <telerik:RadGridView/> |
| </telerik:RadPane> |
| </telerik:RadPaneGroup> |
| </telerik:RadSplitContainer> |
| </telerik:RadDocking.DocumentHost> |
| <telerik:RadSplitContainer> |
| <telerik:RadPaneGroup SelectedIndex="0"> |
| <telerik:RadPane x:Name="rpDrzewo" Header="Menu" CanUserClose="False"> |
| <telerik:RadTreeView x:Name="rtvDokumenty" IsLineEnabled="True" |
| IsDragDropEnabled="True" ItemTemplateSelector="{StaticResource ExampleTemplateSelector}"> |
| <Style TargetType="telerik:RadTreeViewItem"> |
| <Setter Property="IsExpanded" Value="True" /> |
| </Style> |
| </telerik:RadTreeView> |
| </telerik:RadPane> |
| <telerik:RadPane x:Name="rpSkroty" Header="Moje dokumenty" CanUserClose="False"> |
| <ListBox x:Name="lbSkroty" dragDrop:RadDragAndDropManager.AllowDrop="True"> |
| <ListBox.ItemTemplate> |
| <DataTemplate> |
| <StackPanel Orientation="Vertical" HorizontalAlignment="Center" Width="100"> |
| <Image Source="{Binding Icon}" HorizontalAlignment="Center" Width="16" Height="16"/> |
| <TextBlock Text="{Binding Name}" FontWeight="Bold" HorizontalAlignment="Center" |
| TextWrapping="Wrap"/> |
| <TextBlock Text="{Binding Count}" HorizontalAlignment="Center" |
| TextWrapping="Wrap"/> |
| </StackPanel> |
| </DataTemplate> |
| </ListBox.ItemTemplate> |
| <ListBox.Style> |
| <Style TargetType="ListBox"> |
| <Setter Property="dragDrop:RadDragAndDropManager.AllowDrop" Value="True" /> |
| </Style> |
| </ListBox.Style> |
| <ListBox.ItemContainerStyle> |
| <Style TargetType="Control"> |
| <Setter Property="dragDrop:RadDragAndDropManager.AllowDrop" Value="True" /> |
| </Style> |
| </ListBox.ItemContainerStyle> |
| <ListBox.ItemsPanel> |
| <ItemsPanelTemplate> |
| <primitives:RadUniformGrid HorizontalAlignment="Center" VerticalAlignment="Top" Columns="1"/> |
| </ItemsPanelTemplate> |
| </ListBox.ItemsPanel> |
| </ListBox> |
| </telerik:RadPane> |
| </telerik:RadPaneGroup> |
| </telerik:RadSplitContainer> |
| <telerik:RadSplitContainer InitialPosition="DockedBottom"> |
| <telerik:RadPaneGroup SelectedIndex="-1"> |
| <telerik:RadPane Header="Pozycja obiegu" x:Name="rpObieg" CanUserClose="False"/> |
| </telerik:RadPaneGroup> |
| </telerik:RadSplitContainer> |
| </telerik:RadDocking> |
| </Grid> |
| </UserControl> |
MainPage.cs
| using System; |
| using System.Collections; |
| using System.Collections.Generic; |
| using System.Collections.ObjectModel; |
| using System.Linq; |
| using System.Windows; |
| using System.Windows.Controls; |
| using System.Windows.Input; |
| using System.Windows.Media; |
| using Telerik.Windows.Controls; |
| using Telerik.Windows.Controls.DragDrop; |
| using Telerik.Windows.Controls.TreeView; |
| using Telerik.Windows.Controls.Primitives; |
| namespace InSEAAtr |
| { |
| public partial class MainPage : UserControl |
| { |
| //ObservableCollection<RadTreeViewItem> allMenu = Generate(); |
| ObservableCollection<RadTreeViewItem> myMenu; |
| public MainPage() |
| { |
| InitializeComponent(); |
| rtvDokumenty.Items.Clear(); |
| rtvDokumenty.ItemsSource = CategoryViewModel.Generate(); |
| IList orderSource = new ObservableCollection<MenuViewModel>(); |
| lbSkroty.ItemsSource = orderSource; |
| RadDragAndDropManager.AddDropQueryHandler(lbSkroty, OnDropQuery); |
| RadDragAndDropManager.AddDropInfoHandler(lbSkroty, OnDropInfo); |
| RadDragAndDropManager.AddDragQueryHandler(lbSkroty, OnDragQuery); |
| RadDragAndDropManager.AddDragInfoHandler(lbSkroty, OnDragInfo); |
| //demo! |
| } |
| #region demo |
| // OnDragQuery event handler |
| private void OnDragQuery(object sender, DragDropQueryEventArgs e) |
| { |
| System.Windows.Controls.ListBox listBox = sender as System.Windows.Controls.ListBox; |
| if (listBox != null) |
| { |
| IList selectedItems = listBox.SelectedItems.Cast<object>().ToList(); |
| e.Options.Payload = selectedItems; |
| } |
| e.QueryResult = true; |
| e.Handled = true; |
| } |
| // OnDropQuery event handler |
| private void OnDropQuery(object sender, DragDropQueryEventArgs e) |
| { |
| ICollection draggedItems = e.Options.Payload as ICollection; |
| bool result = draggedItems.Cast<object>().All((object item) => item is MenuViewModel); |
| e.QueryResult = result; |
| e.Handled = true; |
| } |
| // OnDragInfo event handler |
| private void OnDragInfo(object sender, DragDropEventArgs e) |
| { |
| System.Windows.Controls.ListBox listBox = sender as System.Windows.Controls.ListBox; |
| IEnumerable draggedItems = e.Options.Payload as IEnumerable; |
| if (e.Options.Status == DragStatus.DragInProgress) |
| { |
| //Set up a drag cue: |
| TreeViewDragCue cue = new TreeViewDragCue(); |
| cue.ItemTemplate = listBox.ItemTemplate; |
| cue.ItemsSource = draggedItems; |
| e.Options.DragCue = cue; |
| } |
| else if (e.Options.Status == DragStatus.DragComplete) |
| { |
| IList source = listBox.ItemsSource as IList; |
| foreach (object draggedItem in draggedItems) |
| { |
| //source.Remove(draggedItem); |
| } |
| } |
| } |
| // OnDropInfo event handler |
| private void OnDropInfo(object sender, DragDropEventArgs e) |
| { |
| System.Windows.Controls.ItemsControl wishlist = e.Options.Destination as System.Windows.Controls.ItemsControl; |
| ICollection draggedItems = e.Options.Payload as ICollection; |
| if (wishlist == null) |
| return; |
| // Get the drag cu that the TreeView or we have created |
| TreeViewDragCue cue = e.Options.DragCue as TreeViewDragCue; |
| if (e.Options.Status == DragStatus.DropPossible) |
| { |
| // Set a suitable text: |
| cue.DragActionContent = String.Format("Dodaj do Moich Dokumentów"); |
| cue.IsDropPossible = true; |
| wishlist.Background = this.Resources["DropPossibleBackground"] as Brush; |
| } |
| else if (e.Options.Status == DragStatus.DropImpossible) |
| { |
| cue.DragActionContent = null; |
| cue.IsDropPossible = false; |
| } |
| else if (e.Options.Status == DragStatus.DropComplete) |
| { |
| IList items = wishlist.ItemsSource as IList; |
| foreach (object draggedItem in draggedItems) |
| { |
| items.Add(draggedItem); |
| } |
| } |
| if (e.Options.Status != DragStatus.DropPossible) |
| { |
| wishlist.Background = new SolidColorBrush(Colors.White); |
| } |
| } |
| #endregion |
| } |
| public class CategoryViewModel |
| { |
| public static IList Generate() |
| { |
| CategoryViewModel fak = new CategoryViewModel(); |
| fak.Title = "Faktury"; |
| foreach (MenuViewModel item in MenuViewModel.Generate(1)) |
| { |
| fak.Items.Add(item); |
| } |
| CategoryViewModel kor = new CategoryViewModel(); |
| kor.Title = "Korespondencja"; |
| foreach (MenuViewModel item in MenuViewModel.Generate(2)) |
| { |
| kor.Items.Add(item); |
| } |
| return new ObservableCollection<object>() |
| { |
| fak, kor |
| }; |
| } |
| public CategoryViewModel() |
| { |
| Items = new ObservableCollection<object>(); |
| } |
| public string Title |
| { |
| get; |
| set; |
| } |
| public IList Items |
| { |
| get; |
| set; |
| } |
| } |
| public class ProductViewModel |
| { |
| // Data generation. |
| private static Random generator = new Random(1676545846); |
| private static string[] adjectives = "Fabulous,Amazing,New,Classic,Modern,Durable,Outstanding,Excellent,Premium".Split(','); |
| private static string[] owner = "Alaska,Jonhn,Ray,Ruby,Stone,Lilly,Scott,Barney,Dorian,Neo,Sarah".Split(','); |
| private static string[] objects = "Pen,Manual,Bicycle,Umbrella,Mouse,Vase,Keyboard".Split(','); |
| private static decimal[] prices = { 12.99M, 13.15M, 24.99M, 33.99M, 9.99M, 15.99M, 16.99M, 12.50M }; |
| public static IEnumerable<ProductViewModel> Generate(int count) |
| { |
| for (int i = 0; i < count; i++) |
| { |
| string product = objects[generator.Next(objects.Length)]; |
| ProductViewModel result = new ProductViewModel(); |
| result.Name = String.Format("{0}'s {1} {2}", |
| owner[generator.Next(owner.Length)], |
| adjectives[generator.Next(adjectives.Length)], |
| product); |
| result.UnitPrice = prices[generator.Next(prices.Length)]; |
| result.Description = String.Format("Exquisite handcrafted {0}.", product.ToLower()); |
| yield return result; |
| } |
| } |
| public string Name |
| { |
| get; |
| set; |
| } |
| public string Description |
| { |
| get; |
| set; |
| } |
| public decimal UnitPrice |
| { |
| get; |
| set; |
| } |
| } |
| public class MenuViewModel |
| { |
| public static List<MenuViewModel> Generate(int count) |
| { |
| List<MenuViewModel> result = new List<MenuViewModel>(); |
| switch (count) |
| { |
| case 1: |
| MenuViewModel m2 = new MenuViewModel(); |
| m2.Count = 2; |
| m2.Name = "Korespondencja przychodzÄ…ca"; |
| m2.Icon = "Images/Icons/AtrValidate16.png"; |
| result.Add(m2); |
| MenuViewModel m3 = new MenuViewModel(); |
| m3.Count = 2; |
| m3.Name = "Korespondencja wychodzÄ…ca"; |
| m3.Icon = "Images/Icons/BUzytkownikUsun16.png"; |
| result.Add(m3); |
| break; |
| case 2: |
| MenuViewModel m6 = new MenuViewModel(); |
| m6.Count = 6; |
| m6.Name = "Faktury kosztowe"; |
| m6.Icon = "Images/Icons/BUzytkownikEdytuj16.png"; |
| result.Add(m6); |
| MenuViewModel m1 = new MenuViewModel(); |
| m1.Count = 6; |
| m1.Name = "Faktury kosztowe"; |
| m1.Icon = "Images/Icons/BUzytkownikHaslo16.png"; |
| result.Add(m1); |
| MenuViewModel m4 = new MenuViewModel(); |
| m4.Count = 2; |
| m4.Name = "Faktury drobne"; |
| m4.Icon = "Images/Icons/BUzytkownikNieaktywni16.png"; |
| result.Add(m4); |
| break; |
| default: |
| break; |
| } |
| return result; |
| } |
| public string Name |
| { |
| get; |
| set; |
| } |
| public int Count |
| { |
| get; |
| set; |
| } |
| public string Icon |
| { |
| get; |
| set; |
| } |
| } |
| public class ExampleTemplateSelector : Telerik.Windows.Controls.DataTemplateSelector |
| { |
| public override DataTemplate SelectTemplate(object item, DependencyObject container) |
| { |
| if (item is ProductViewModel) |
| return ProductTemplate; |
| else if (item is CategoryViewModel) |
| return CategoryTemplate; |
| else if (item is MenuViewModel) |
| return MenuTemplate; |
| return null; |
| } |
| public DataTemplate ProductTemplate |
| { |
| get; |
| set; |
| } |
| public DataTemplate CategoryTemplate |
| { |
| get; |
| set; |
| } |
| public DataTemplate MenuTemplate |
| { |
| get; |
| set; |
| } |
| } |
| } |