WPF拖放

问题描述

| 如何实现WPF应用程序的拖放?我可以打开2个相同的应用程序,然后将一个对象从一个拖到另一个。这是我要拖动的内容
<Grid Width=\"100\" Height=\"50\">
 <Rectangle BackGround=\"Red\"/>
 <TextBlock>Hello World</TextBlock>
</Grid>
网格在拖动的其他应用程序中的外观必须与从中拖动的网格相同。有什么办法吗?     

解决方法

        我过去曾成功使用过Gong Solutions拖放,这是一个非常易于使用的DLL。您可以在这里看到它的一个小样本:Gong Solutions     ,        使用行为: 您需要这样的标记:
<Window xmlns:i=
\"clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity\"
xmlns:custom=
\"clr-namespace:CustomBehaviorsLibrary;assembly=CustomBehaviorsLibrary >
例如:
<Canvas>
<Rectangle Canvas.Left=\"10\" Canvas.Top=\"10\" Fill=\"Yellow\" Width=\"40\" Height=\"60\">
</Rectangle>
<Ellipse Canvas.Left=\"10\" Canvas.Top=\"70\" Fill=\"Blue\" Width=\"80\" Height=\"60\">
<i:Interaction.Behaviors>
<custom:DragInCanvasBehavior></custom:DragInCanvasBehavior>
</i:Interaction.Behaviors>
</Ellipse>
<Ellipse Canvas.Left=\"80\" Canvas.Top=\"70\" Fill=\"OrangeRed\" Width=\"40\" Height=\"70\">
<i:Interaction.Behaviors>
<custom:DragInCanvasBehavior></custom:DragInCanvasBehavior>
</i:Interaction.Behaviors>
</Ellipse>
    ,        WPF拖放示例:使用vb.net 2010
        <Window
        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"
        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"
        xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"d\" x:Class=\"mofakfree\"
        Title=\"drop test \" Height=\"359\" Width=\"329\">
        <Grid>
                <Label x:Name=\"label2\" AllowDrop=\"True\"  Margin=\"159,30,12,0\" Background=\"#FF1900FF\" Content=\"To Here\" DragEnter=\"label2_DragEnter\" Drop=\"label2_Drop\" Height=\"51\" VerticalAlignment=\"Top\" />
                <Label x:Name=\"label1\" AllowDrop=\"True\"  Margin=\"26,158,240\" Background=\"#FFDE2626\" Content=\"source\" MouseDown=\"label1_MouseDown\"/>
        </Grid>
        </Window>
vb.net代码:
 Class mofakfree



        Private Sub label1_MouseDown(ByVal sender as Object,ByVal e as System.Windows.Input.MouseButtonEventArgs)
            \'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            Dim lbl As Label = CType(sender,Label)
            DragDrop.DoDragDrop(lbl,lbl.Content,DragDropEffects.Copy)
        End Sub

        Private Sub label2_DragEnter(ByVal sender as Object,ByVal e as System.Windows.DragEventArgs)
            \'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
            If e.Data.GetDataPresent(DataFormats.Text) Then
        e.Effects = DragDropEffects.Copy
            Else
            e.Effects = DragDropEffects.None
        End If

        End Sub

        Private Sub label2_Drop(ByVal sender as Object,ByVal e as System.Windows.DragEventArgs)
            \'xxxxxxxxxxxxxxxxxx
            CType(sender,Label).Content = e.Data.GetData(DataFormats.Text)

        End Sub

    End Class