创建数据的拖动源到Finder(例如,将文件拖放到Finder)

时间:2020-01-17 03:32:36

标签: c# macos xamarin drag-and-drop

我有一个要从中拖动 的NSView子类,因此我试图将其拖到查找器中并显示文件对象(例如,在桌面上)。 (我认为单词是拖动目标就可以了)。

我可以将各种数据类型拖放到其他应用程序(RTF,RTFD,TIFF)中,但是将文件拖到查找器中使我很吃力-我想知道是否有人能正常工作?

我在视图上有一组文本,图像和图标(代表文件)。我允许用户选择一些并拖动,或者仅单击图标/图像并拖动。拖动到textEdit窗口就可以了-我可以拖动文本,文本+文件,图像等。

我声明可以拖动的类型:

public override string[] WritablePasteboardTypes()
    {
       List<string> arr = new List<string> { NSPasteboard.NSPasteboard.NSPasteboardTypeTIFF, NSPasteboard.NSPasteboardTypeRTFD, NSPasteboard.NSPasteboardTypeRTF, NSPasteboard.NSPasteboardTypeTIFF, <my private type> };
        return arr.ToArray();
    }

然后我编写一个将数据复制到粘贴板的函数:

public override bool WriteSelectionToPasteboard(NSPasteboard pboard, string type) {
    if (type == NSPasteboard.NSPasteboardTypeRTFD) {
        ... copy an RTFD version to the pasteboard ...
    }
    if (type == NSPasteboard.NSPasteboardTypeTIFF) {
        ... copy an TIFF image to the pasteboard ...
    }
    ... etc
}

正如我提到的,这一切似乎都奏效。我可以成功地拖放/复制/粘贴到TextEdit和其他应用程序。

我希望能够将应用程序中的文件拖放到查找器中,并在桌面上创建文件。

我尝试过:

NSPasteboardNSPasteboardTypeFileUrl -Finder完全拒绝拖放(拖动图像显示十字图标) NSPasteboard.NSUrlType -Finder似乎可以接受,但是当您释放图标时,该图标会返回我的应用程序(即放置失败)。我可能将NSUrl数据的结构弄错了吗?

我似乎无法为 NSPasteboard.NSFileContentsType 构建数据。 使用 NSPasteboard.NSFilesPromiseType 会导致我的应用严重崩溃(有时必须重新启动)。这是新的,几乎没有文档,当然也没有C#示例。这似乎是前进的“正确”方法。

有人有一些将对象拖到应该变成文件的对象的工作示例吗?

非常感谢。 保罗。

0 个答案:

没有答案
相关问题