在做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>
下面是自己做的一个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>
解决方案 »
- 有好人么? 嘿嘿。能不能帮忙写个数据结构(C语言)的基本功能啊?
- C# 利用正则表达式如何从一个HTML文档中抽取模板
- asp.net里数据库的操作
- 关于windows服务
- 各位高手,请教个简单的问题,本人蛮菜的,刚步入编程初步~~~希望大家支持
- Panel 添加控件后,清空,为什么没有变化,大家来看一下!
- 求助,请问哪位有c#仿windows 7桌面、任务栏、桌面图标的源码?
- .NET的一大问题:需要安装SP3/SP4才能用非对称加密!!!!!!!!!!!!
- 请问这个是怎么回事?100分 在线等待
- 关于组合体,在inside C#的CH18中有一例程,但我怎么personal的account.dll版本不是最新的?
- 关于滚轮事件
- datagridview创建数据连接后数据无法保存数据库
那个只是个Demo,随便用了几个控件,实际项目中需要在WPF中使用WinForm控件,并且需要拖动WPF控件到WinForm控件中实现拖放
data.SetData(typeof(Test), o);
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;
}