代码之家  ›  专栏  ›  技术社区  ›  swabygw

WPF拖放自定义类

  •  0
  • swabygw  · 技术社区  · 8 年前

    我这样开始操作:

    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。如何将整个CellContainer(不仅仅是ObjectKey)从拖放传递到拖放?

    1 回复  |  直到 8 年前
        1
  •  0
  •   swabygw    8 年前

    解决方法如下:

    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