WPF Drag and Drop
How to implement drag & drop for a WPF application? I could open 2 the same apps and drag an object from one to another. Here's what I want to drag:
<Grid Width="100" Height="50">
<Rectangle BackGround="Red"/>
开发者_运维问答<TextBlock>Hello World</TextBlock>
</Grid>
The Grid has to look the same in the other app where it is dragged as the one from it was dragged. Any solutions?
I've used Gong Solutions Drag and Drop successfully in the past, it's a very easy DLL to use. You can see a small sample of it here: Gong Solutions
Using a Behavior :
you’ll need markup like this:
<Window xmlns:i=
"clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:custom=
"clr-namespace:CustomBehaviorsLibrary;assembly=CustomBehaviorsLibrary >
example :
<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>
example WPF Drag and Drop : using 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,30,158,240" Background="#FFDE2626" Content="source" MouseDown="label1_MouseDown"/>
</Grid>
</Window>
vb.net code :
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
精彩评论