This question is locked. New answers and comments are not allowed.
I have the following XAML defining elements on a control I'm using to learn more about drag/drop operations between controls:
I have successfully handled the drag from TreeView and Drop onto ListBox, but when I click on an item in the ListBox and try to drag it to the TreeView none of the query events fire and no drag/drop operation occurs. Right now the "tree" event handlers have no code because I'm just setting breakpoints to see if the event fires. Anyone see some obvious I've missed in my setup?
Here's the code-behind:
<telerik:RadTreeView x:Name="dictionaryTreeView" IsDragDropEnabled="True" ItemTemplate="{StaticResource dictionaryItemTemplate}" ItemsSource="{Binding Items, Mode=TwoWay}" Grid.Column="0" telerik:RadDragAndDropManager.AllowDrop="True"> </telerik:RadTreeView><ListBox x:Name="definitionListBox" ItemsSource="{Binding UnusedDefinitions, Mode=TwoWay}" Grid.Column="1" telerik:RadDragAndDropManager.AllowDrop="True" />I have successfully handled the drag from TreeView and Drop onto ListBox, but when I click on an item in the ListBox and try to drag it to the TreeView none of the query events fire and no drag/drop operation occurs. Right now the "tree" event handlers have no code because I'm just setting breakpoints to see if the event fires. Anyone see some obvious I've missed in my setup?
Here's the code-behind:
using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Windows.Controls;using Telerik.Windows.Controls;using Telerik.Windows.Controls.DragDrop;using ItemsControl = System.Windows.Controls.ItemsControl;namespace TreeToListSample{ public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); RadDragAndDropManager.AddDragQueryHandler(definitionListBox, OnListBoxDragQuery); RadDragAndDropManager.AddDragInfoHandler(definitionListBox, OnListBoxDragInfo); RadDragAndDropManager.AddDropQueryHandler(definitionListBox, OnListBoxDropQuery); RadDragAndDropManager.AddDropInfoHandler(definitionListBox, OnListBoxDropInfo); RadDragAndDropManager.AddDragQueryHandler(dictionaryTreeView, OnTreeViewDragQuery); RadDragAndDropManager.AddDragInfoHandler(dictionaryTreeView, OnTreeViewDragInfo); RadDragAndDropManager.AddDropQueryHandler(dictionaryTreeView, OnTreeViewDropQuery); RadDragAndDropManager.AddDropInfoHandler(dictionaryTreeView, OnTreeViewDropInfo); var vm = new DictionaryModel { Items = new ObservableCollection<DictionaryItem> { new DictionaryItem { Word = "Word 1", Definitions = new ObservableCollection<string>() }, new DictionaryItem { Word = "Word 2", Definitions = new ObservableCollection<string> { "A definition", "Another definition" } } }, UnusedDefinitions = new ObservableCollection<string>{"Definition 1", "Definition 2", "Definition 3"} }; DataContext = vm; } private void OnTreeViewDropInfo(object sender, DragDropEventArgs e) { } private void OnTreeViewDropQuery(object sender, DragDropQueryEventArgs e) { } private void OnTreeViewDragInfo(object sender, DragDropEventArgs e) { } private void OnTreeViewDragQuery(object sender, DragDropQueryEventArgs e) { } private void OnListBoxDropInfo(object sender, DragDropEventArgs e) { if (e.Options.Status == DragStatus.DropComplete) { ItemsControl target = e.Options.Destination as ItemsControl; ItemsControl source = e.Options.Source as RadTreeViewItem; if (target == null || e.Options.Payload == null || source == null) return; var payload = e.Options.Payload as IEnumerable<object> ?? Enumerable.Empty<object>(); var targetCollection = target.ItemsSource as ObservableCollection<string>; foreach (var item in payload) { targetCollection.Add(item.ToString()); } e.Handled = true; } } private void OnListBoxDropQuery(object sender, DragDropQueryEventArgs e) { if(e.Options.Status == DragStatus.DropDestinationQuery) { e.QueryResult = true; e.Handled = true; } else if ( e.Options.Status == DragStatus.DropSourceQuery) { e.QueryResult = true; e.Handled = true; } } private void OnListBoxDragInfo(object sender, DragDropEventArgs e) { if(e.Options.Status == DragStatus.DragInProgress) { e.Options.ArrowCue = RadDragAndDropManager.GenerateArrowCue(); } } private void OnListBoxDragQuery(object sender, DragDropQueryEventArgs e) { if (e.Options.Status == DragStatus.DragQuery) { e.Options.Payload = definitionListBox.SelectedItem; e.Options.ArrowCue = RadDragAndDropManager.GenerateArrowCue(); e.QueryResult = true; e.Handled = true; } } } public class DictionaryModel { public ObservableCollection<DictionaryItem> Items { get; set; } public ObservableCollection<String> UnusedDefinitions { get; set; } } public class DictionaryItem { public string Word { get; set; } public ObservableCollection<string> Definitions { get; set; } }}