WPF控件拖放到WinForm控件

huohuli008 2012-03-22 11:38:08
在做WPF程序时通过WindowsFormsHost嵌入了一个WinForm控件。现在想实现从WPF控件中拖放数据到WinForm控件,但是在WinForm控件的DragDrop里无法获取到数据(数据为自定义对象,若为string是可以的)。
下面是自己做的一个Demo,当拖放椭圆(wpf控件)到Label(winform控件)时,将会弹出"拖放数据无效"的对话框
后台逻辑:

private void ellipse1_MouseMove(object sender, MouseEventArgs e)
{
DataObject data = new DataObject(System.Windows.Forms.DataFormats.FileDrop, new Test());
DragDrop.DoDragDrop(ellipse1, data, DragDropEffects.Move);
}

private void Label_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
if (!e.Data.GetDataPresent(System.Windows.Forms.DataFormats.FileDrop))
{
MessageBox.Show("没数据");
return;
}

var data = e.Data.GetData(System.Windows.Forms.DataFormats.FileDrop);
if (data != null)
{
MessageBox.Show(data.ToString());
}
else
{
MessageBox.Show("拖放数据无效");
}
}

private void Label_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect = System.Windows.Forms.DragDropEffects.Move;
}
}

[Serializable]
public class Test
{
public override string ToString()
{
return "Test数据";
}
}


界面XAML:

<Grid>
<WindowsFormsHost Height="100" HorizontalAlignment="Left" Margin="10,10,0,0" Name="windowsFormsHost1" VerticalAlignment="Top" Width="200" Background="Azure">
<winform:Label DragEnter="Label_DragEnter" DragDrop="Label_DragDrop" Text="Hello" AllowDrop="True"></winform:Label>
</WindowsFormsHost>
<Ellipse Height="100" Stroke="AliceBlue" StrokeThickness="50" HorizontalAlignment="Left" Margin="10,120,0,0" Name="ellipse1" VerticalAlignment="Top" Width="200" MouseMove="ellipse1_MouseMove" />
</Grid>
...全文
396 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
huohuli008 2012-03-23
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 lianshaohua 的回复:]

在DoDragDrop()之前,设置一下数据的类型及具体的数据:
data.SetData(typeof(Test), o);
[/Quote]
感谢感谢,之前一直想着用string来作为数据获取的key,现在改为用type就可以了


private void ellipse1_MouseMove(object sender, MouseEventArgs e)
{
//var o = new Test();
DataObject data = new DataObject(typeof(Test), new Test());
//data.SetData(typeof(Test), o);

DragDrop.DoDragDrop(ellipse1, data, DragDropEffects.Move);
}

private void Label_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
if (!e.Data.GetDataPresent(typeof(Test)))
{
MessageBox.Show("没数据");
return;
}

var data = e.Data.GetData(typeof(Test));
if (data != null)
{
MessageBox.Show(data.ToString());
}
else
{
MessageBox.Show("拖放数据无效");
}
}

private void Label_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect = System.Windows.Forms.DragDropEffects.Move;
}
ztenv 2012-03-23
  • 打赏
  • 举报
回复
在DoDragDrop()之前,设置一下数据的类型及具体的数据:
data.SetData(typeof(Test), o);
huohuli008 2012-03-23
  • 打赏
  • 举报
回复
好吧,应各位要求,头像换了!!!
huohuli008 2012-03-23
  • 打赏
  • 举报
回复
神~~~~从前发帖的时候都没碰到有人说头像的问题,难道现在变了???
BruceLink 2012-03-23
  • 打赏
  • 举报
回复
哥以前也遇到过这个问题,想了好多招数才解决的.
BruceLink 2012-03-23
  • 打赏
  • 举报
回复
小兄弟,你的头像敢快换一换,等换了哥就告诉你,你那眼神是蔑视论坛里的兄弟.
  • 打赏
  • 举报
回复
楼主的眼神, 群嘲么
baby764 2012-03-23
  • 打赏
  • 举报
回复
冲着楼主的眼神,帮顶了·
huohuli008 2012-03-22
  • 打赏
  • 举报
回复
顶一下~~~等人回答
huohuli008 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhang0322yan 的回复:]

还真没有这么用过 为什么引用WinForm中的Label控件啊 直接用WPF的Label控件不可以吗?
[/Quote]

那个只是个Demo,随便用了几个控件,实际项目中需要在WPF中使用WinForm控件,并且需要拖动WPF控件到WinForm控件中实现拖放
梦里独赏花 2012-03-22
  • 打赏
  • 举报
回复
还真没有这么用过 为什么引用WinForm中的Label控件啊 直接用WPF的Label控件不可以吗?
huohuli008 2012-03-22
  • 打赏
  • 举报
回复
来几个Mark的也好呀,难道这个问题不具备回答的价值???
huohuli008 2012-03-22
  • 打赏
  • 举报
回复
有人能提供些帮助吗???
huohuli008 2012-03-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kkgoose 的回复:]

mark下,楼主头像很嘲讽嘛呵呵
[/Quote]
嘲讽还不敢跟猩猩比......
kkgoose 2012-03-22
  • 打赏
  • 举报
回复
mark下,楼主头像很嘲讽嘛呵呵

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧