I am handling a RadTreeView DropQueryEvent to try and change the text on the drag action cue depending on which key is pressed. However, the cue does not change using the code below - is my code correct?
Thanks,
Chris
private void TreeView_DropQuery(object sender, DragDropQueryEventArgs e){ var source = e.Options.Source as RadTreeViewItem; var cue = e.Options.DragCue as TreeViewDragCue; if (e.Options.Status == DragStatus.DropDestinationQuery && otherlogic(removed)) { var destination = e.Options.Destination as RadTreeViewItem; if (destination != null && destination.DropPosition == DropPosition.Inside && otherlogic(removed)) { cue.DragActionContent = "Show this text! "; e.QueryResult = true; } else { // Cannot drag here. e.QueryResult = false; cue.DragActionContent = String.Empty; } } else { e.QueryResult = false; cue.DragActionContent = String.Empty; } e.Handled = true;}5 Answers, 1 is accepted
We cannot see something unusual from your code if we use this documentation article as a starting point. But we are also not aware of your scenario, how your tree is populated and what the "otherlogic" method does. Is it possible for you to send us more from your code so that we could investigate this deeper? Thank you in advance for your cooperation.
Regards,Petar Mladenov
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>
I can prepare a sample if you like but first I'd like to clarify my post.
The "otherlogic" method can be ignored - that's where I do other custom boolean logic on my data.
In the code I posted my problem is that unless I set e.QueryResult to false my custom drag cue is not shown. So it works for denying a drag (as in your documentation example) but not when affirming the user action (in my code the "Show this text" part).
Should this be possible? If so I'll make a demo of my scenario.
Thanks,
Chris.
Here is some more code to illustrate the problem. To re-iterate my issue, I would like to set the drag cue when a drop is possible as well as when it is not. In my sample code only the "can't drop here" cue is used when a drag is not possible.
Thanks,
Chris.
MainPage.xaml
<UserControl x:Class="TreeViewDragCueTest.MainPage" mc:Ignorable="d" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" d:DesignHeight="300" d:DesignWidth="400"> <Grid x:Name="LayoutRoot" Background="White"> <telerik:RadTreeView x:Name="TreeView" Margin="8" IsExpandOnDblClickEnabled="True" IsDragDropEnabled="True" IsEditable="True" IsLineEnabled="False"> <telerik:RadTreeViewItem Header="Root"> <telerik:RadTreeViewItem Header="Branch 1"> <telerik:RadTreeViewItem Header="Yes" /> <telerik:RadTreeViewItem Header="No" /> <telerik:RadTreeViewItem Header="Yes" /> <telerik:RadTreeViewItem Header="No" /> <telerik:RadTreeViewItem Header="Yes" /> </telerik:RadTreeViewItem> <telerik:RadTreeViewItem Header="Branch 2"> <telerik:RadTreeViewItem Header="Yes" /> <telerik:RadTreeViewItem Header="No" /> <telerik:RadTreeViewItem Header="Yes" /> <telerik:RadTreeViewItem Header="No" /> <telerik:RadTreeViewItem Header="Yes" /> </telerik:RadTreeViewItem> <telerik:RadTreeViewItem Header="Branch 3"> <telerik:RadTreeViewItem Header="Yes" /> <telerik:RadTreeViewItem Header="No" /> <telerik:RadTreeViewItem Header="Yes" /> <telerik:RadTreeViewItem Header="No" /> <telerik:RadTreeViewItem Header="Yes" /> </telerik:RadTreeViewItem> </telerik:RadTreeViewItem> </telerik:RadTreeView> </Grid></UserControl>MainPage.xaml.cs
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using Telerik.Windows;using Telerik.Windows.Controls;using Telerik.Windows.Controls.DragDrop;using Telerik.Windows.Controls.TreeView;namespace TreeViewDragCueTest{ public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); TreeView.AddHandler(RadDragAndDropManager.DropQueryEvent, new EventHandler<DragDropQueryEventArgs>(TreeView_DropQuery), true); } private void TreeView_DropQuery(object sender, DragDropQueryEventArgs e) { var source = e.Options.Source as RadTreeViewItem; var cue = e.Options.DragCue as TreeViewDragCue; if (e.Options.Status == DragStatus.DropDestinationQuery) { var destination = e.Options.Destination as RadTreeViewItem; if (destination.Header.ToString() == "Yes") { cue.DragActionContent = "Can drop here!"; e.QueryResult = true; } else { // Cannot drag here. cue.DragActionContent = "Can't drop here!"; e.QueryResult = false; } } } }}You have to use both DropQuery and DropInfo events because the destination item also sets the dragcue during the D'N'D process. You can examine the project where your requirement is implemented. Please let us know if you need further assistance.
All the best,Petar Mladenov
the Telerik team
Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>
This works great, thanks for the help.
Chris.