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.
. 여러 항목을 드래그하는 코드에 어떤 문제가 있는지 말할 수 없습니다.