Drag and Drop operation in WPF using VB.NET

In this article you will learn about the all Drag and Drop operation in WPF.
  • 4888
 

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

drag1.gif 

Conclusion

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


Categories

More Articles

© 2020 DotNetHeaven. All rights reserved.