With this new behaviour applied to any panel you will be able to drag the items of any child listbox and drop them where ever you want. In the example you will see that the items get drop into another listbox but this can be easily customized.

This behaviour exposes a single event you have to suscribe: onMouseReleased.

This event occurs whenever the item of the listbox is dropped so you can take control and make exactly what you want to do with the item information.

This behaviour is based on an article you can find here. Althought I could not make it work it the way the author proposes because of the listboxitems handle the MouseLeftButtonDown event. I solved subscribing to a different event.

Here you can see an example and download the source.

Install Microsoft Silverlight

Imports System
Imports System.IO
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Data
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Input
Imports System.Windows.Interactivity
Imports System.Windows.Threading

Public Class DragAndDropListboxItemsBehaviour
    Inherits Behavior(Of Panel)

    Dim minimumHorizontalDragDistance As Double = CDbl(10.0)
    Dim minimumVerticalDragDistance As Double = CDbl(10.0)
    Dim horizDrag As Double = CDbl(0)
    Dim vertDrag As Double = CDbl(0)

    Const minVDistance As Double = CDbl(20.0)
    Const minHDistance As Double = CDbl(20.0)
    Protected dragSource As ListBox = Nothing

    Protected mouseVerticalPosition As Double
    Protected mouseHorizontalPosition As Double
    Protected captured As Boolean = False
    Protected mousePosition As Point
    Protected pop As Primitives.Popup
    Protected _datatemplate As DataTemplate
    Protected _timer As DispatcherTimer
    Protected _delay As Integer = 0
    Dim _waiting As Boolean
    Dim _waitingsince As Date
    Dim _lb As ListBox

    Public Event onMouseReleased(ByVal s As Object, ByVal e As MouseReleseasedEventArgs)
    Public Class MouseReleseasedEventArgs
        Public sender As Object
        Public item As Object
        Public e As MouseButtonEventArgs
        Public dragSource As Object
    End Class

    Public Shared ListboxProperty As DependencyProperty = DependencyProperty.Register("Listbox", GetType(String), GetType(DragAndDropListboxItemsBehaviour), Nothing)
    Public Property Listbox() As String
        Get
            Return CType(GetValue(ListboxProperty), String)
        End Get
        Set(ByVal value As String)
            SetValue(ListboxProperty, value)
            If Not AssociatedObject Is Nothing Then _lb = GetListbox(value)
        End Set
    End Property

    Public Property BehaviourDataTemplate() As DataTemplate
        Get
            Return _datatemplate
        End Get
        Set(ByVal value As DataTemplate)
            _datatemplate = value
        End Set
    End Property

    Public Property Delay() As Integer
        Get
            Return _delay
        End Get
        Set(ByVal value As Integer)
            _delay = value
            _timer.Interval = New TimeSpan(0, 0, 0, 0, value)
        End Set
    End Property

    Public Sub New()
        pop = New Primitives.Popup
        pop.IsOpen = True
        _timer = New DispatcherTimer
        Delay = _delay
        AddHandler _timer.Tick, AddressOf Timer_tick
    End Sub

    Protected Overrides Sub OnAttached()
        MyBase.OnAttached()
        AssociatedObject.Children.Add(pop)
        AddHandler AssociatedObject.Loaded, AddressOf Loaded
    End Sub

    Protected Sub Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
        _lb = GetListbox(Listbox)
        If _lb Is Nothing Then Exit Sub
        AddHandler _lb.SelectionChanged, AddressOf lb_SelectionChanged
        AddHandler AssociatedObject.MouseMove, AddressOf Page_MouseMove
        AddHandler AssociatedObject.MouseLeftButtonUp, AddressOf Page_MouseLeftButtonUp
    End Sub

    Protected Overrides Sub OnDetaching()
        MyBase.OnDetaching()
        RemoveHandler _lb.SelectionChanged, AddressOf lb_SelectionChanged
        RemoveHandler AssociatedObject.MouseMove, AddressOf Page_MouseMove
        RemoveHandler AssociatedObject.MouseLeftButtonUp, AddressOf Page_MouseLeftButtonUp
        AssociatedObject.Children.Remove(pop)
    End Sub

    Private Sub Page_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
        _timer.Stop()
        _waiting = False
        If pop.Child Is Nothing Then Exit Sub
        'get the content
        Dim content As New List(Of Object)
        For Each ct As ContentControl In CType(pop.Child, Panel).Children
            content.Add(ct.Content)
        Next
        RaiseEvent onMouseReleased(Me, New MouseReleseasedEventArgs() _
        With {.sender = sender, .e = e, .item = content, .dragSource = dragSource})
        horizDrag = vertDrag = 0
        captured = False
        pop.Child = Nothing
        pop.ReleaseMouseCapture()
        mouseVerticalPosition = 0
        mouseHorizontalPosition = 0
    End Sub

    Private Sub Page_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
        mousePosition = e.GetPosition(AssociatedObject)
        If (captured) Then
            ' Calculate the current position of the object.
            Dim deltaV As Double = e.GetPosition(AssociatedObject).Y - mouseVerticalPosition
            Dim deltaH As Double = e.GetPosition(AssociatedObject).X - mouseHorizontalPosition
            horizDrag += deltaH
            vertDrag += deltaV
            Dim newTop As Double = deltaV + CDbl(pop.VerticalOffset)
            Dim newLeft As Double = deltaH + CDbl(pop.HorizontalOffset)
            'Set new position of object.
            pop.VerticalOffset = newTop
            pop.HorizontalOffset = newLeft
            'Update position global variables.
            mouseVerticalPosition = e.GetPosition(AssociatedObject).Y
            mouseHorizontalPosition = e.GetPosition(AssociatedObject).X
        End If
    End Sub

    Private Sub lb_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs)
        _waiting = True
        _waitingsince = DateTime.Now
        _timer.Start()
    End Sub

    Protected Sub Timer_tick(ByVal sender As Object, ByVal e As EventArgs)
        If _waiting Then
            If DateTime.Now.Subtract(_waitingsince).TotalMilliseconds > Delay Then
                _waiting = False
                StartDragDrop(_lb)
            End If
        Else
            _timer.Stop()
        End If
    End Sub

    Public Overridable Sub StartDragDrop(ByVal sender As ListBox)
        If (sender.SelectedItems Is Nothing) Then Exit Sub
        Dim dt As DataTemplate
        If BehaviourDataTemplate Is Nothing Then
            dt = CType(sender.ItemTemplate, DataTemplate)
        Else
            dt = BehaviourDataTemplate
        End If
        dragSource = sender
        Dim _stk As New StackPanel
        _stk.Opacity = CDbl(0.5)
        For Each o As Object In sender.SelectedItems
            Dim c As New ContentControl
            c.Content = o
            c.ContentTemplate = dt
            _stk.Children.Add(c)
        Next
        pop.Child = _stk
        dt.LoadContent()
        pop.CaptureMouse()
        captured = True
        mouseVerticalPosition = mousePosition.Y
        mouseHorizontalPosition = mousePosition.X
        pop.HorizontalOffset = mouseHorizontalPosition
        pop.VerticalOffset = mouseVerticalPosition
    End Sub

    Public Function GetListbox(ByVal name As String) As ListBox
        Return TryCast(GetObject(AssociatedObject, name), ListBox)
    End Function

    Public Function GetObject(ByVal parent As FrameworkElement, ByVal name As String) As FrameworkElement
        Dim element As FrameworkElement = TryCast(parent.FindName(name), FrameworkElement)
        If element Is Nothing Then
            Dim g As Text.RegularExpressions.GroupCollection = _
            Text.RegularExpressions.Regex.Match(name, "^(\S+?)\.(\S+)").Groups
            If g.Count > 1 Then
                Dim el As FrameworkElement = TryCast(parent.FindName(g(1).Value), FrameworkElement)
                If el IsNot Nothing Then
                    element = GetObject(el, g(2).Value)
                End If
            End If
        End If
        Return element
    End Function

End Class

'############### EXAMPLE OF HOW TO HANDLE THE onMouseReleased event. ###############################

' Public Sub onMouseReleased(ByVal s As Object, ByVal e As Behavior1.MouseReleseasedEventArgs)
'        If (e.item Is Nothing) Then Exit Sub
'        txtPosition.Text = "Received at " & Date.Now.Millisecond.ToString
'Dim sourceCollection As ObservableCollection(Of Customer) = Nothing
'Dim c As Customer = Nothing
'Dim elements As List(Of UIElement) = CType(VisualTreeHelper.FindElementsInHostCoordinates(e.e.GetPosition(Nothing), e.sender), List(Of UIElement))
'        For i As Integer = 0 To elements.Count - 1
'Dim lb As ListBox = TryCast(elements(i), ListBox)
'            If Not lb Is Nothing Then
'                sourceCollection = CType(e.dragSource.ItemsSource, ObservableCollection(Of Customer))
'Dim cust As Customer = CType(e.item, Customer)
'                If sourceCollection.Contains(cust) Then
'                    sourceCollection.Remove(cust)
'                    CType(lb.ItemsSource, ObservableCollection(Of Customer)).Add(CType(e.item, Customer))
'                End If
'            End If
'        Next
'    End Sub

'############### EXAMPLE OF HOW TO HANDLE THE onMouseReleased event. ###############################

Note that the previous code is slightly different from the one in the demo. This one has some extra properties as Delay (amount of time passed before the behaviour starts) or BehaviourDataTemplate (to change the datatemplate once you start dragging).

Download demo