原文地址:
https://wpf.2000things.com/2012/12/06/706-dragging-user-interface-elements-between-applications/
你可以在两个应用程序间拖拽控件,这种情况下,你通过读取可视树XAML中,你想要拖拽的控件的那一部分作为数据。
下面是一个拖拽整个StackPanel (包括其字控件)到另外一个应用程序的例子。
在拖拽应用程序这边(Application1),我们使用一个XamlWriter 实例将XAML存储为一个string。
设置StackPanel 的事件和属性如下(必须设置背景色,原因详见Panel类及其子类只有在设置了背景色以后才会触发鼠标事件):
MouseLeftButtonDown="StackPanel_MouseLeftButtonDown" Background="Transparent"
拖拽代码如下:
private void StackPanel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
string xaml = XamlWriter.Save(e.Source);
DataObject data = new DataObject(DataFormats.Xaml, xaml);
DragDrop.DoDragDrop((DependencyObject)e.Source, data, DragDropEffects.Copy);
}
在放开接收一边(Application2),我们使用XamlReader 载入数据,并恢复为控件。设置Window 的Drop 事件响应函数。
private void Window_Drop(object sender, DragEventArgs e)
{
string xaml = (string)e.Data.GetData(DataFormats.Xaml);
this.Content = XamlReader.Load(new XmlTextReader(new StringReader(xaml)));
}