我想从 Silverlight UIElement 中拖动图像并将其放到用户桌面或 Windows 资源管理器上

2024-04-17

我有一个包含图像的 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);

问题在于 Silverlight 中的拖动操作无法简单地访问浏览器之外的任何内容(按照设计)。根据用户的设置,您甚至必须获得剪贴板操作和沙盒临时文件存储的明确权限。这听起来确实是一个更适合 WPF 应用程序的任务(也许使用网络部署 http://msdn.microsoft.com/en-us/library/aa969776.aspx?)或其他一些桌面应用程序技术。

然而,这里所说的是您可以尝试/考虑的一些事情:

  1. Internet Explorer 中托管的 Silverlight/Javascript/ActiveX 组合
  2. Silverlight 5“Out of Brower”和 P/Invoke(听说 Silverlight 5 出来时将支持 P/Invoke)
  3. Silverlight 连接到在同一台计算机上运行的 Web 服务(疯狂,但你没有要求“不疯狂”,你要求的是可能)

我对 Win32 API 中的拖放操作不太熟悉,因此需要进行大量研究和实验才能确认这是否可行(而且我已经可以告诉您这是不切实际的)。

Edit:根据您提供的有关该问题的额外信息,我怀疑可以做您正在尝试的事情。首先,您使用的是 WPF 还是 WinForms?我假设是 WPF,但您的评论之一是 WinForms。我不太熟悉 WPF 拖/放操作,但经过研究后,我认为您的代码处于正确的路径上。我创建了一个 WPF 应用程序并在KeyDown事件。这意味着鼠标按钮不一定被按下。如果我发起DragDrop当按钮was下来它起作用了。如果我在鼠标按钮时启动wasn't向下,我必须按下鼠标按钮,然后拖动操作就会开始(这是意外的,因为我认为鼠标必须已经按下)。如果我在应用程序外部按下鼠标,然后给予 WPF 应用程序焦点 (ALT+Tab),然后启动DragDrop当鼠标按钮仍然按下时,它不起作用。我得到了一个参考MouseDevice并检查了LeftButton属性,并且状态显示为“已释放”,即使按钮仍被按住。看来这里的关键是拖放与内部鼠标状态交互的方式。您可能必须找到一种方法来设置鼠标状态(也许使用 UI Automation API?)。在这一点上,很明显这整件事都是一个黑客行为(尽管可能有可能让它以某种方式工作)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我想从 Silverlight UIElement 中拖动图像并将其放到用户桌面或 Windows 资源管理器上 的相关文章

  • OpenCV Visual Studio ntdll.dll

    我尝试在 Visual Studio 2013 上使用 OpenCV 2 4 10 创建一个项目 但由于以下异常 到目前为止我运气不佳 请建议帮助 TIA letstryitonemoretime exe Win32 Loaded C Us
  • CMake 和 Visual Studio:如何获得快速、安静的命令行构建?

    我有一个 cmake 项目 它成功地完成了我想要的一切 但我有大约 100 个文件 当我只需要重新编译一个文件时 我厌倦了每次看到生成的巨大输出 每个文件 30 行 明确地说 我正在编译cmake build 得到这个结果 我需要传递给编译
  • 如何在 MFC 中调整对话框大小时移动控件?

    我已经在 MFC 中创建了对话框视图 从下图中可以清楚地看到 如滑块控件和编辑框等 当我调整对话框大小时 这些控件不会移动 在此输入图像描述 https i stack imgur com 7OxAK jpg 我想移动控件以适应对话框 但不
  • 将指针转换为浮点数?

    我有一个unsigned char 通常 这指向一块数据 但在某些情况下 指针就是数据 即 铸造一个int的价值unsigned char 指针 unsigned char intData unsigned char myInteger 反
  • 泛型与接口的实际优势

    在这种情况下 使用泛型与接口的实际优势是什么 void MyMethod IFoo f void MyMethod
  • 如何“杀死”Pthread?

    我正在学习 Pthreads 并且想知道杀死这样一个对象的最佳方法是什么 在寻找类似的问题后 我无法找到 明确 的答案 但请随时向我指出任何相关问题 我正在使用一个小型客户端服务器应用程序 其中服务器主线程正在侦听套接字上的客户端连接 每次
  • 在桌面应用程序中,类库的连接字符串存储在哪里?我可以在app.config中使用吗?

    我是桌面应用程序开发的新手 目前正在使用分层架构 用户界面 DAL BLL 构建桌面应用程序 在 Web 开发中 我曾经将连接字符串存储在 web config 中 我的类库从那里访问它 请指导我在桌面应用程序中如何以及在何处存储 DAL
  • 使用静态类型代替变量

    当您的项目不使用命名空间时 有什么方法可以告诉编译器使用静态类型而不是变量吗 例如 我有一个名为 User 的类 它具有各种静态和非静态方法 假设调用了其中一个静态方法GetUser 我想称之为User GetUser 方法来自一个方法 该
  • 基于 MS Bot Framework 中的响应分支对话框/表单

    我们正在尝试使用 MS Bot Framework 但尚未完全弄清楚如何实现此场景 我们有一个 LUIS 对话框 类型 它工作正常并且经过适当的培训 以常见的三明治为例 LUIS 意图寻找的基本内容是用户询问订单状态 如果问题中提供了订单号
  • 如何在 C++ 中对静态缓冲区执行字符串格式化?

    我正在处理一段对性能要求非常高的代码 我需要执行一些格式化的字符串操作 但我试图避免内存分配 甚至是内部库的内存分配 在过去 我会做类似以下的事情 假设是 C 11 constexpr int BUFFER SIZE 200 char bu
  • 正则表达式删除某些字符周围不需要的空格

    我正在尝试从 JavaScript 文件中删除一些不需要的空格 并在将文件发送到客户端之前使用 C 和 Regex 组合文件 我有一个JavascriptHandler处理 js 文件 效果很好 这是我用来 打包 JavaScript 的函
  • C 中“for”循环中的两个变量

    我正在编写一些代码 需要在其中使用两个变量for环形 下面的代码看起来没问题吗 它确实给了我预期的结果 for loop 1 offset loop 2 offset 2 loop 1 gt offset 190 loop 2 lt 190
  • Create CFrameWnd 给出了第一次机会异常——为什么?

    我正在尝试使用基于 CFrameWnd 的代码编写一个简单的 MFC 应用程序 该应用程序在可滚动窗口中绘制 下面的代码改编自 Prosise Programming Windows with MFC 第 2 版 第 89ff 页 当我在调
  • 无法将方法组“Read”转换为非委托类型“bool”

    我正在尝试使用SqlDataReader检查条目是否存在 如果存在则返回ID 否则返回false 当我尝试编译时 出现错误 无法将方法组 Read 转换为非委托类型 bool 我一直在遵循在 VB 中找到的示例 但似乎翻译可能不正确 pri
  • C# 的空条件委托调用线程安全吗? [复制]

    这个问题在这里已经有答案了 这就是我一直以来编写事件引发者的方式 例如属性更改 public event PropertyChangedEventHandler PropertyChanged private void RaisePrope
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • 如何将 Metro 应用部署到桌面?

    我正在尝试将我的 C 应用程序部署到我的 Windows 8 Metro 桌面 我可以在 bin 文件夹中看到部署的文件 但是当我尝试打开它们时 出现以下错误 该应用程序只能在 AppContainer 的上下文中运行 我检查了属性上下文菜
  • 具有多种类型的 C# 泛型类型推断

    我有以下通用方法 用于将一种类型的输入对象序列化为超类型 如下所示 public string SerialiseAs
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对
  • 什么时候使用静态库需要头文件?

    如果我在 Linux 中用 C 创建一个静态库并生成 a 文件 我 或其他人 如何使用该库 例如 我的库定义了一个类 我认为仅仅提供 a 文件是不够的 还需要提供头文件 我如何知道 a 文件必须提供哪些头文件 例如 我是否需要提供我的库代码

随机推荐