whe*_*s53 7 c# silverlight drag-and-drop winforms uielement
我有一个包含图像的Silverlight控件.我希望用户能够将图像拖出Silverlight应用程序并将其放在可以放置图像的任何位置.例如,桌面或PowerPoint幻灯片或Word文档.到目前为止,我所读到的所有内容都表明它无法完成,但我发现很难相信.我对Silverlight和RIA开发很新,所以任何帮助都会非常感激.
下面是我的WinForm表单中的代码示例,但拖动从未启动.
string[] aString = { imagePath };
DataObject data = new DataObject(DataFormats.FileDrop, aString);
data.SetData(DataFormats.StringFormat, imagePath);
DoDragDrop(data, DragDropEffects.Copy);
Run Code Online (Sandbox Code Playgroud)
问题在于 Silverlight 中的拖动操作无法简单地访问浏览器之外的任何内容(按照设计)。根据用户的设置,您甚至必须获得剪贴板操作和沙盒临时文件存储的明确权限。这听起来确实是一项更适合 WPF 应用程序(也许通过Web 部署?)或其他桌面应用程序技术的任务。
然而,这里所说的是您可以尝试/考虑的一些事情:
我对 Win32 API 中的拖放操作不太熟悉,因此需要进行大量研究和实验才能确认这是否可行(而且我已经可以告诉您这是不切实际的)。
编辑:根据您提供的有关该问题的额外信息,我怀疑可以做您正在尝试的事情。首先,您使用的是 WPF 还是 WinForms?我假设是 WPF,但您的评论之一是 WinForms。我不太熟悉 WPF 拖/放操作,但经过研究后,我认为您的代码处于正确的路径上。我创建了一个 WPF 应用程序并在事件期间启动了拖动KeyDown。这意味着鼠标按钮不一定被按下。如果我DragDrop在按钮按下时启动它,它就会起作用。如果我在鼠标按钮未按下时启动,则必须按下鼠标按钮,然后拖动操作才会开始(这是意外的,因为我认为鼠标必须已经按下)。如果我在应用程序外部按下鼠标,然后给予 WPF 应用程序焦点(ALT+Tab),然后在DragDrop鼠标按钮仍然按下时启动,它不起作用。我得到了对 的引用MouseDevice并检查了该LeftButton属性,即使按钮仍被按住,状态也显示为“已发布”。看来这里的关键是拖放与内部鼠标状态交互的方式。您可能必须找到一种方法来设置鼠标状态(也许使用 UI Automation API?)。在这一点上,很明显这整件事都是一个黑客行为(尽管可能有可能让它以某种方式工作)。
| 归档时间: |
|
| 查看次数: |
1376 次 |
| 最近记录: |