I am attempting to drag a RadTreeViewItem from a RadTreeView to an Image. I've recreated the problem in a clean solution and will include the XAML and CS below. My issue is, when I am dragging the RadTreeViewItem "Drag Me" (x:Name="draggable") over the RadTreeViewItem "Drop Me" (x:Name="droppable") I get an informative DragCue which shows my item and indicates that I am able to "Drop in Drop Me". Upon dropping the item, the treeview's DragEnded event is fired and I can perform any logic required there.
When I try to drag "Drag Me" over the Image (x:Name="droppableImage"), a block (red circle with slash) appears next to the item and when I drop it, the DragEnded event does not fire. The OnDropQuery event does fire upon hovering over the image, however setting e.QueryResult = true does not alter the behavior. Anyhow, the code below should be fairly self explanatory.
Thanks in advance.
MainPage.xaml
-------------------------------------------------------------------------------------------------------
<UserControl x:Class="TestDrag.MainPage" |
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:Controls="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Navigation" xmlns:DragDrop="clr-namespace:Telerik.Windows.Controls.DragDrop;assembly=Telerik.Windows.Controls" |
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> |
<Grid x:Name="LayoutRoot"> |
<Image x:Name="droppableImage" Source="check.png" DragDrop:RadDragAndDropManager.AllowDrop="True" /> |
<Controls:RadTreeView x:Name="treeView" IsDragDropEnabled="True" BorderBrush="Black" BorderThickness="1"> |
<Controls:RadTreeView.Items> |
<Controls:RadTreeViewItem x:Name="droppable" Header="Drop Me" IsDropAllowed="True" /> |
<Controls:RadTreeViewItem x:Name="draggable" Header="Drag Me" IsDropAllowed="False" /> |
</Controls:RadTreeView.Items> |
</Controls:RadTreeView> |
</Grid> |
</UserControl> |
-------------------------------------------------------------------------------------------------------
MainPage.xaml.cs
-------------------------------------------------------------------------------------------------------
namespace TestDrag { |
public partial class MainPage : UserControl { |
public MainPage() { |
InitializeComponent(); |
treeView.DragEnded += treeView_DragEnded; |
treeView.AddHandler(RadDragAndDropManager.DropQueryEvent, new EventHandler<DragDropQueryEventArgs>(OnDropQuery), true); |
draggable.AddHandler(RadDragAndDropManager.DropQueryEvent, new EventHandler<DragDropQueryEventArgs>(OnDropQuery), true); |
} |
private void treeView_DragEnded(object sender, RadTreeViewDragEndedEventArgs e) { |
if (e.TargetDropItem != null && e.DraggedItems.Count == 1) { |
RadWindow.Alert("DragEnded fired."); |
} |
} |
private void OnDropQuery(object sender, DragDropQueryEventArgs e) { |
if (e.Options.Destination is RadTreeViewItem) { |
var treeViewItem = (RadTreeViewItem)e.Options.Destination; |
if (treeViewItem.DropPosition != DropPosition.Inside) { |
e.QueryResult = false; |
} |
} else if (e.Options.Destination is Image) { |
e.QueryResult = true; |
e.Handled = true; |
} |
} |
} |
} |