2012-12-31 6 views
0

나는 ListBox이 있으며 여러 항목을 클릭 한 다음 다른 프로그램으로 드래그 할 수 있기를 원합니다. 하나의 객체에 대해 제대로 작동하도록 할 수 있습니다. 난 그냥 이상 1여러 항목 ListBox에서 끌어서 놓기

을 위해 일하고 얻을 수 없습니다 나는 WPF Drag & drop from ListBox with SelectionMode Multiple 살펴했지만, 그것은 완전히 나를 난처한 상황에 빠진 (그것을 사용하려고하지만, 그것이 작동하지 않았고 나는 그것을 이해하지 못했다.)

현재 내 드래그 앤 드롭 코드는 다음과 같습니다.

<ListBox.ItemContainerStyle> 
    <Style TargetType="{x:Type ListBoxItem}"> 
     <EventSetter Event="MouseDoubleClick" Handler="ListBoxItemDClick"/> 
     <EventSetter Event="MouseDown" Handler="ReferenceList_PreviewMouseLeftButtonDown"/> 
     <EventSetter Event="MouseMove" Handler="ReferenceList_PreviewMouseMove"/> 
     <EventSetter Event="MouseUp" Handler="ReferenceListMouseUp"/> 
     <Style.Triggers> 
      ... 
     </Style.Triggers> 
    </Style> 
</ListBox.ItemContainerStyle> 

Private Sub ListBoxItemDClick(sender As Object, e As MouseButtonEventArgs) 'DoubleClick 
    Dim PW As MainWindow = Window.GetWindow(MainPage) 
    If PW IsNot Nothing Then 
     Dim selite As ListBoxItem = DirectCast(ReferenceList.ItemContainerGenerator.ContainerFromItem(ReferenceList.SelectedItem), ListBoxItem) 
     PW.NewItem = False 
     PW.EditItem = ReferenceList.SelectedItem 
     PW.ChangeSlide(sender, 1) 
    End If 
End Sub 

Private Sub ReferenceList_PreviewMouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) 'Mouse Down on ListBoxItem 
    Dim PW As MainWindow = Window.GetWindow(MainPage) 
    StartPoint = e.GetPosition(Nothing) 
    PW.Resizing = False 
End Sub 

Private Sub ReferenceListMouseUp(sender As Object, e As MouseButtonEventArgs) 'Mouse Up on ListBoxItem 
    Dim PW As MainWindow = Window.GetWindow(MainPage) 
    StartPoint = e.GetPosition(Nothing) 
    PW.Resizing = True 
End Sub 

Private Sub ReferenceList_PreviewMouseMove(sender As Object, e As MouseEventArgs) 'MouseMove on ListBoxItem 
    Dim PW As MainWindow = Window.GetWindow(MainPage) 
    If PW.Resizing = False Then 
     If ReferenceList.SelectedItems.Count = 1 Then 
      Dim MousePosition As Point = e.GetPosition(Nothing) 
      Dim Difference As Vector = StartPoint - MousePosition 
      Dim StopDrop As Boolean = False 
      Dim LBITEM As ListBoxItem = DirectCast(sender, ListBoxItem) 
      If e.LeftButton = MouseButtonState.Pressed AndAlso (Math.Abs(Difference.X) > SystemParameters.MinimumHorizontalDragDistance Or Math.Abs(Difference.Y) > SystemParameters.MinimumVerticalDragDistance) Then 
       PW.TempItem = LBITEM.DataContext 
       Dim FN As String = PW.TempItem.PropLastName & ", " & PW.TempItem.PropFirstName.Substring(0, 1) 
       Dim TT As String = PW.TempItem.PropTitle 
       Dim YR As String = PW.TempItem.PropYear.ToString 
       Dim ReferenceText As String = FN & " " & YR & ", " & TT 
       Dim DragData As DataObject = New DataObject(DataFormats.StringFormat, ReferenceText) 
       If DragData IsNot Nothing And StopDrop = False Then 
        DragDrop.DoDragDrop(sender, DragData, DragDropEffects.Copy) 
       End If 
      End If 
     Else 
      Dim TotalReference As String = "Reference Data" 
      For Each ITEM As Object In ReferenceList.SelectedItems 
       Dim MousePosition As Point = e.GetPosition(Nothing) 
       Dim Difference As Vector = StartPoint - MousePosition 
       Dim StopDrop As Boolean = False 
       If e.LeftButton = MouseButtonState.Pressed AndAlso (Math.Abs(Difference.X) > SystemParameters.MinimumHorizontalDragDistance Or Math.Abs(Difference.Y) > SystemParameters.MinimumVerticalDragDistance) Then 
        PW.TempItem = ITEM 
        Dim FN As String = PW.TempItem.PropLastName & ", " & PW.TempItem.PropFirstName.Substring(0, 1) 
        Dim TT As String = PW.TempItem.PropTitle 
        Dim YR As String = PW.TempItem.PropYear.ToString 
        Dim ReferenceText As String = FN & " " & YR & ", " & TT 
        If TotalReference Is "Reference Data" Then 
         TotalReference = ReferenceText 
        Else 
         TotalReference = ReferenceText & vbCr & ReferenceText 
        End If 
       End If 
       Dim DragData As DataObject = New DataObject(DataFormats.StringFormat, TotalReference) 
       If DragData IsNot Nothing And StopDrop = False Then 
        DragDrop.DoDragDrop(sender, DragData, DragDropEffects.Copy) 
       End If 
      Next 
     End If 
    End If 
End Sub 

변수 : 내가 알려 주시기 바랍니다 더 자세한 정보를 제공해야하는 경우

PW.Resizing (Boolean on MainWindow that determines whether window is resizing (True/False) 
PW.TempItem (Declared on MainWindow as: Public TempItem as Reference 'Reference is my own class like a Student or such class to store data) 
Private StartPoint As Point 
ReferenceList is the ListBox containing all the ListBoxItems. 

. 여러 항목을 드래그하는 코드에 어떤 문제가 있는지 말할 수 없습니다.

답변

0

신경 쓰지 마세요, 제 실수를 발견했습니다. 이 라인으로

TotalReference = ReferenceText & vbCr & ReferenceText 

:

TotalReference = TotalReference & vbCr & ReferenceText 

그리고 그 모든 지금 일하는 나는이 줄을 교체!