2017-12-19 10 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 

「Me」は、実際に追加されたプロパティを持つキャンバスです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に設定されていることです。 DragからDropへの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