#706 – 在应用程序间拖拽进行控件复制(Dragging User Interface Elements Between Applications)

来源:互联网 发布:tomcat java options 编辑:程序博客网 时间:2024/05/19 12:38
原文地址: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 载入数据,并恢复为控件。设置WindowDrop 事件响应函数。

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)));}


706-001

706-002

0 0
原创粉丝点击