This question is locked. New answers and comments are not allowed.
Please Disregard. I figured it out. I was not casting the destination properly.
Hello,
I have an ItemsControl where each item is a TreeView. Below this ItemsControl is a GridView with a list of items. I'm trying to allow a user to drag items from the GridView into one of the TreeViews in the ItemsControl. When a user drops the item from the GridView onto a TreeView, the item would get added to that specific TreeView. My XAML looks like the following:
I can drag items from the GridView. But I cannot identify how to drop it on one of the TreeViews in the ItemsControl. I have a message box that should say "dropped". But it is not triggering. I'm not sure what I'm doing wrong. My C# code is provided below. What am I doing wrong? How can I accomplish this?
Thank you for your help,
Hello,
I have an ItemsControl where each item is a TreeView. Below this ItemsControl is a GridView with a list of items. I'm trying to allow a user to drag items from the GridView into one of the TreeViews in the ItemsControl. When a user drops the item from the GridView onto a TreeView, the item would get added to that specific TreeView. My XAML looks like the following:
| <Grid> |
| <Grid.RowDefinitions> |
| <RowDefinition /> |
| <RowDefinition /> |
| </Grid.RowDefinitions> |
| <Grid> |
| <Grid.RowDefinitions> |
| <RowDefinition Height="Auto" /> |
| <RowDefinition /> |
| </Grid.RowDefinitions> |
| <StackPanel Orientation="Horizontal"> |
| <TextBlock Text="Tasks" VerticalAlignment="Center" /> |
| </StackPanel> |
| <ItemsControl x:Name="myItemsControl" Grid.Row="1" |
| telerikDragDrop:RadDragAndDropManager.AllowDrag="True" |
| Loaded="myItemsControl_Loaded"> |
| <ItemsControl.ItemTemplate> |
| <DataTemplate> |
| <navigation:RadTreeView x:Name="myTree" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Loaded="myTree_Loaded"> |
| <navigation:RadTreeViewItem Header="{Binding}"> |
| <navigation:RadTreeViewItem.ItemTemplate> |
| <DataTemplate> |
| <TextBlock Text="{Binding}" /> |
| </DataTemplate> |
| </navigation:RadTreeViewItem.ItemTemplate> |
| </navigation:RadTreeViewItem> |
| </navigation:RadTreeView> |
| </DataTemplate> |
| </ItemsControl.ItemTemplate> |
| </ItemsControl> |
| </Grid> |
| <Grid Grid.Row="1"> |
| <Grid.RowDefinitions> |
| <RowDefinition Height="Auto" /> |
| <RowDefinition /> |
| </Grid.RowDefinitions> |
| <StackPanel Orientation="Horizontal"> |
| <TextBlock Text="Days" /> |
| </StackPanel> |
| <telerik:RadGridView x:Name="myGridView" UseAlternateRowStyle="True" |
| AutoGenerateColumns="False" ShowGroupPanel="False" Grid.Row="1" |
| telerikDragDrop:RadDragAndDropManager.AllowDrop="True" |
| Loaded="myGridView_Loaded"> |
| <telerik:RadGridView.RowStyle> |
| <Style TargetType="gridview:GridViewRow"> |
| <Setter Property="telerikDragDrop:RadDragAndDropManager.AllowDrag" Value="True" /> |
| </Style> |
| </telerik:RadGridView.RowStyle> |
| <telerik:RadGridView.Columns> |
| <telerik:GridViewDataColumn Header="Day" DataMemberBinding="{Binding}" IsReadOnly="True" IsFilterable="False" IsGroupable="False" /> |
| </telerik:RadGridView.Columns> |
| </telerik:RadGridView> |
| </Grid> |
| </Grid> |
I can drag items from the GridView. But I cannot identify how to drop it on one of the TreeViews in the ItemsControl. I have a message box that should say "dropped". But it is not triggering. I'm not sure what I'm doing wrong. My C# code is provided below. What am I doing wrong? How can I accomplish this?
Thank you for your help,
| private void myTree_Loaded(object sender, RoutedEventArgs e) |
| { |
| RadTreeView myTreeView = (RadTreeView)(sender); |
| RadDragAndDropManager.SetAllowDrop(myTreeView, true); |
| RadDragAndDropManager.AddDropQueryHandler(myTreeView, myTreeView_OnDropQuery); |
| RadDragAndDropManager.AddDropInfoHandler(myTreeView, myTreeView_OnDropInfo); |
| } |
| private void myTreeView_OnDropQuery(object sender, Telerik.Windows.Controls.DragDrop.DragDropQueryEventArgs e) |
| { |
| RadGridView destination = sender as RadGridView; |
| if (destination != null) |
| { |
| e.Handled = true; |
| e.QueryResult = true; |
| } |
| } |
| private void myTreeView_OnDropInfo(object sender, Telerik.Windows.Controls.DragDrop.DragDropEventArgs e) |
| { |
| RadGridView destination = sender as RadGridView; |
| if (e.Options.Status == Telerik.Windows.Controls.DragDrop.DragStatus.DropComplete) |
| { |
| MessageBox.Show("dropped!"); |
| } |
| } |
| private void myItemsControl_Loaded(object sender, RoutedEventArgs e) |
| { |
| List<string> tasks = new List<string>(); |
| tasks.Add("Sweep Floor"); |
| tasks.Add("Task out Garbage"); |
| tasks.Add("Clean Windows"); |
| myItemsControl.ItemsSource = tasks; |
| } |
| private void myGridView_Loaded(object sender, RoutedEventArgs e) |
| { |
| RadDragAndDropManager.AddDropQueryHandler(myGridView, myGridView_OnDropQuery); |
| RadDragAndDropManager.AddDropInfoHandler(myGridView, myGridView_OnDropInfo); |
| RadDragAndDropManager.AddDragQueryHandler(myGridView, myGridView_OnDragQuery); |
| RadDragAndDropManager.AddDragInfoHandler(myGridView, myGridView_OnDragInfo); |
| List<string> days = new List<string>(); |
| days.Add("Sunday"); |
| days.Add("Monday"); |
| days.Add("Tuesday"); |
| days.Add("Wednesday"); |
| days.Add("Thursday"); |
| days.Add("Friday"); |
| days.Add("Saturday"); |
| myGridView.ItemsSource = days; |
| } |
| private void myGridView_OnDragQuery(object sender, DragDropQueryEventArgs e) |
| { |
| RadGridView gridView = sender as RadGridView; |
| if (gridView != null) |
| e.Options.Payload = gridView.SelectedItem; |
| // Inform the event handlers that we have programmatically handled it |
| e.QueryResult = true; |
| e.Handled = true; |
| } |
| private void myGridView_OnDragInfo(object sender, DragDropEventArgs e) |
| { |
| RadGridView gridView = sender as RadGridView; |
| string draggedItem = e.Options.Payload as string; |
| if (e.Options.Status == DragStatus.DragInProgress) |
| { |
| //Setting up a drag cue: |
| ContentControl cue = new ContentControl(); |
| //Choosing a template for the items: |
| cue.ContentTemplate = this.Resources["MyTemplate"] as DataTemplate; |
| cue.Content = draggedItem; |
| e.Options.DragCue = cue; |
| } |
| else if (e.Options.Status == DragStatus.DragComplete) |
| { |
| //deleting the dragged item from the RadGridView |
| // IList source = gridView.ItemsSource as IList; |
| // source.Remove(draggedItem); |
| } |
| } |
| private void myGridView_OnDropQuery(object sender, Telerik.Windows.Controls.DragDrop.DragDropQueryEventArgs e) |
| { |
| RadGridView destination = sender as RadGridView; |
| if (destination != null) |
| { |
| e.Handled = true; |
| e.QueryResult = true; |
| } |
| } |
| private void myGridView_OnDropInfo(object sender, Telerik.Windows.Controls.DragDrop.DragDropEventArgs e) |
| { |
| RadGridView destination = sender as RadGridView; |
| if (e.Options.Status == Telerik.Windows.Controls.DragDrop.DragStatus.DropComplete) |
| { |
| } |
| } |