Создание Drag SOURCE для данных в Finder (например, перетаскивание файла в Finder) - PullRequest
0 голосов
/ 17 января 2020

У меня есть подкласс NSView, который я перетаскиваю из , и я пытаюсь сделать так, чтобы я мог перетащить в искатель и получить объект файла (например, на рабочем столе). (мои слова в качестве места назначения перетаскивания просто превосходны).

Я могу перетаскивать / вставлять различные типы данных в другие приложения (RTF, RTFD, TIFF), но перетаскивание файла в искатель меня опередило - Мне было интересно, есть ли у кого-нибудь такая работа?

У меня есть набор текста, изображений и значков (представляющих файлы) на виде. Я разрешаю пользователям выбирать некоторые из них и перетаскивать их или просто нажимать на значок / изображение и перетаскивать. Перетаскивание в окно textEdit работает просто отлично - я могу перетаскивать текст, текст + файлы, изображения и т. Д. c.

Я объявляю типы, которые можно перетаскивать:

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 и другие приложения.

Я хочу иметь возможность перетаскивать файл из моего приложения в Finder и создавать его на рабочем столе.

Я пробовал:

NSPasteboardNSPasteboardTypeFileUrl - Искатель полностью отклоняет перетаскивание (изображение перетаскивания показывает значок крестика) NSPasteboard.NSUrlType - Появляется Finder принять, но затем, когда вы отпустите, значок вернется в мое приложение (т.е. сбой не удастся). Возможно, я неправильно структурировал данные NSUrl?

Кажется, я не могу структурировать данные для NSPasteboard.NSFileContentsType . Использование NSPasteboard.NSFilesPromiseType приводит к тому, что мое приложение сильно ломает sh (иногда приходится перезагружаться). Это новое и очень мало документации и, конечно, нет C# примеров. Это может показаться «правильным» путем.

У кого-нибудь есть рабочие примеры перетаскивания объектов в искатель, который должен превратиться в файл?

Большое спасибо. Пол.

...