当前位置: 首页 > 编程语言 > C#

我想从Silverlight UIElement拖动一个图像并将其放在用户桌面或Windows资源管理器上分享

时间:2023-04-10 16:05:10 C#

C#学习教程:我想从一个SilverlightUIElement中拖出一个图像并将其放到用户桌面或Windows资源管理器上浏览器我有一个包含图像的Silverlight控件。我希望用户能够将图像拖出Silverlight应用程序并将其放在他们可以放置图像的任何位置。例如,桌面或PowerPoint幻灯片或Word文档。到目前为止我读到的所有内容都说这是不可能完成的,但我觉得很难相信。我是Silverlight和RIA开发的新手,因此非常感谢任何帮助。下面是我的WinForm表单中的代码示例,但拖动从未开始。字符串[]aString={imagePath};DataObject数据=newDataObject(DataFormats.FileDrop,aString);data.SetData(DataFormats.StringFormat,imagePath);DoDragDrop(数据,DragDropEffects.Copy);移动操作无法轻松访问浏览器之外的任何内容(按设计)。根据用户的设置,您甚至必须获得剪贴板操作和沙盒临时文件存储的明确权限。这听起来像是更适合WPF应用程序(也许是Web部署?)或其他桌面应用程序技术的任务。但是,这里有一些您可以尝试/考虑的事情:InternetExplorer中托管的Silverlight/Javascript/ActiveX组合Silverlight5“OutofBrower”和P/Invoke(我听说Silverlight5推出Invoke时将支持P/Invoke)Silverlight连接到在同一台计算机上运行的Web服务(疯了,但你没有问“别疯了”,你可能问过)我对Win32API中的拖放不是很熟悉,所以在我确认之前甚至可能之前需要大量的研究和实验(而且我已经可以告诉你这是不切实际的)。编辑:根据您提供的有关问题的额外信息,我怀疑您可以做您想做的事。首先,您使用的是WPF还是WinForms?我假设WPF,但您的评论之一说WinForms。我对WPF拖放不太熟悉,但仔细研究后,我认为您的代码是在正确的轨道上。我创建了一个WPF应用程序并在KeyDown事件期间启动了拖动。这意味着不一定按下鼠标按钮。如果我在按钮关闭时启动DragDrop,它就可以工作。如果我在鼠标按钮没有按下时开始,我必须按下鼠标按钮并开始拖动操作(这是意外的,因为我认为鼠标一定是按下了)。如果我在应用程序外部按下鼠标,然后为WPF应用程序提供焦点(ALT+Tab),然后在仍按下鼠标按钮时启动DragDrop,它不起作用。我获得了对MouseDevice的引用并检查了LeftButton属性,并且状态显示为“已释放”,即使按钮仍处于按下状态。这里的关键似乎是拖放与内部鼠标状态交互的方式。您可能必须找到一种方法来设置鼠标状态(也许使用UIAutomationAPI?)。在这一点上,很明显整个事情都是黑客攻击(即使它可能以某种方式使其工作)。我们提出的解决方案如下。RIA,即Silverlight向我们的桌面应用程序WinForms发送一条消息,其中包含要拖动的图像路径以及我们要开始拖动的屏幕坐标中的边界矩形。桌面代码创建面板并将其放置在我们要拖动的区域上。该面板是我们使用DoDragDrop在用户单击时启动本机拖动的地方。由于此面板位于silverlight控件的外部和上方,因此一切正常。沙盒节拍。在过去的几个月里,我一直在研究一些Silverlight应用程序,只是发现不可能完全调查您的确切要求。我相信您可以从文件系统,从Silverlight控件拖到控件,但不能拖到文件系统。Silverlight4是否支持从应用程序拖放到桌面?http://msdn.microsoft.com/en-us/library/dd772166%28v=vs.95%29.aspx以上是C#学习教程:我想从一个SilverlightUIElement中拖出一个图像并将其放在用户桌面或Windows资源管理器上分享的所有内容,如果对您有用,需要进一步了解C#学习教程,希望您多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: