2017-12-19 4 views
0

나는 동작과 같이 시작합니다WPF의 드래그 앤 드롭 사용자 정의 클래스

Public Sub cLinkOut_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) 
    'Trace.WriteLine("mousedown: " & ObjectKey) 
    DragDrop.DoDragDrop(TryCast(Me, CellContainer), ObjectKey, DragDropEffects.All) 
    e.Handled = True 
End Sub 

은 "나"는 정말 추가 특성을 가진 캔버스 CellContainer라는 사용자 정의 클래스이다.

Public Sub cLinkIn_Drop(ByVal sender As Object, ByVal e As DragEventArgs) 
    Dim cSource As String = e.Data.GetData(DataFormats.StringFormat) 
    Dim cTarget As String = TryCast(e.OriginalSource, CellContainer).ObjectKey 
    Trace.WriteLine("srce: " & cSource & ", targ: " & cTarget) 
    e.Handled = True 
End Sub 

문제는 e.OriginalSource은 캔버스가 아닌 CellContainer으로 나타나는지, 그리고 cTarget가 Nothing으로 설정됩니다

는이 같은 드롭을 처리합니다. 드래그에서 드롭까지 전체 CellContainer (ObjectKey뿐만 아니라)를 어떻게 전달할 수 있습니까?

답변

0

은 다음과 같이 그것을 해결 :

Public Sub cLinkOut_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) 
    Dim data As DataObject = New DataObject(DataFormats.Serializable, Me) 
    DragDrop.DoDragDrop(CType(e.Source, DependencyObject), data, DragDropEffects.Copy) 
    e.Handled = True 
End Sub 

Public Sub cLinkIn_Drop(ByVal sender As Object, ByVal e As DragEventArgs) 
    Dim c As CellContainer = CType(e.Data.GetData(DataFormats.Serializable), CellContainer) 
    Dim cSource As String = c.ObjectKey 
    Dim cTarget As String = Me.ObjectKey 
    Trace.WriteLine("srce: " & cSource & ", targ: " & cTarget) 
    e.Handled = True 
End Sub