Drag and Drop operation in WPF using VB.NET
In this article you will learn about the all Drag and Drop operation in WPF.
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.