Drag and Drop:
Drag-and-drop operations consider two parts a drag source from which the dragged
object originates and a drop target which receives the dropped object. The drag
source and drop target may be the same application or a different application.
you can say it as a shortcut for advanced users, rather than a standard way of
working. The all methods and events that is used for drag and drop operation are
available in the System.Windows.DragDrop class and then used by other classes
like UIElements.
Basically the Drag and Drop operation called complete after
finishing the three steps these steps are:
-
First step: The Drag and Drop operation begins start when you click an element and holds the mouse button down.
-
Second step: When you moves the mouse over another element. If this element can accept the type of content that's being dragged, the mouse cursor changes to a drag-and-drop icon. Otherwise, the mouse cursor becomes a circle with a line drawn through it.
-
Third step: When you releases the mouse key, the information is receives by the element.
Example of the Drag and Drop
operation
Xaml Code
<Window
x:Class="TestDragDropTreeView.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Drag-and-Drop
TreeView Example"
Height="300"
Width="300"
x:Name="TheWindow">
<TreeView
ItemsSource="{Binding
Path=Stuff,ElementName=TheWindow}"
x:Name="TheTreeView"=
MouseDown="TreeView_MouseDown"
MouseMove="TreeView_MouseMove"
DragEnter="TheTreeView_CheckDropTarget"
DragLeave="TheTreeView_CheckDropTarget"
DragOver="TheTreeView_CheckDropTarget"
Drop="TheTreeView_Drop">
<TreeView.ItemContainerStyle>
<Style
TargetType="{x:Type
TreeViewItem}">
<Setter
Property="AllowDrop"
Value="True"
/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate
ItemsSource="{Binding
Path=MoreStuff}">
<TextBlock
Text="{Binding
Path=Name}"
/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Window>
Vb Code
Imports
System.Collections.ObjectModel
Imports
System.Collections.Specialized
Namespace
TestDragDropTreeView
Public Class Stuff
Public Sub New()
Name = String.Empty
End Sub
Public Sub New(ByVal
name As String)
Me.Name = name
End Sub
''' <summary>
''' The string that will be displayed for this item.
''' </summary>
Public Property Name() As String
''' <summary>
''' The parent of this item.
''' </summary>
Public Property Parent() As Stuff
''' <summary>
''' The child data for this item.
''' </summary>
Public ReadOnly Property
MoreStuff() As
ObservableCollection(Of Stuff)
Get
If _moreStuff Is
Nothing Then
_moreStuff =
New
ObservableCollection(Of Stuff)()
AddHandler _moreStuff.CollectionChanged,
AddressOf OnMoreStuffChanged
End If
Return _moreStuff
End Get
End Property
Private Sub OnMoreStuffChanged(ByVal
sender As Object,
ByVal e As NotifyCollectionChangedEventArgs)
' Note:
This section does not account for multiple items being involved in change
operations.
' Note: This section does not account
for the replace operation.
If
e.Action = NotifyCollectionChangedAction.Add
Then
Dim stuff_Renamed As Stuff = CType(e.NewItems(0),
Stuff)
stuff_Renamed.Parent = Me
ElseIf e.Action =
NotifyCollectionChangedAction.Remove Then
Dim stuff_Renamed As Stuff = CType(e.OldItems(0),
Stuff)
If
stuff_Renamed.Parent Is Me Then
stuff_Renamed.Parent = Nothing
End If
End If
End Sub
Private _moreStuff
As
ObservableCollection(Of Stuff)
End Class
End Namespace
Output Window

Conclusion
Hope this article helps you to understand the
Drag and Drop operation in WPF.