WPF控件拖放到WinForm控件

huohuli008 huohuli008 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在做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>
...全文
评论 17
收藏 已收藏
分享
返回顶部
huohuli008
C# 111,128 成员 642,536 内容