首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Xamarin中使用NSDraggingInfo.EnumerateDraggingItems?

如何在Xamarin中使用NSDraggingInfo.EnumerateDraggingItems?
EN

Stack Overflow用户
提问于 2020-01-14 00:46:28
回答 1查看 145关注 0票数 1

我正在实现NSTableView行拖放。我正在使用这里的示例Drag & Drop Reorder Rows on NSTableView

它实际上运行得相当好,因为当我在表中拖动一行时,我的数据源方法就会被调用。然而,我在使用来自Xamarin的NSDraggingInfo.EnumerateDraggingItems方法时遇到了问题。

Swift代码示例如下:

代码语言:javascript
复制
info.enumerateDraggingItemsWithOptions([], forView: tableView, classes: [NSPasteboardItem.self], searchOptions: [:]) {
    if let str = ($0.0.item as! NSPasteboardItem).stringForType("public.data"), index = Int(str) {
        oldIndexes.append(index)
    }
}

我遇到麻烦的是classes: [NSPasteboardItem.self]

Xamarin方法的签名是:

代码语言:javascript
复制
EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, NSPasteboardReading[], NSDictionary, NSDraggingEnumerator)
EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, NSArray, NSDictionary, NSDraggingEnumerator)
EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, IntPtr, NSDictionary, NSDraggingEnumerator)

如何为classes参数提供所需的实参?

EN

回答 1

Stack Overflow用户

发布于 2020-02-02 06:17:15

似乎xamarin版本不正确(查看github https://github.com/xamarin/xamarin-macios/blob/master/src/AppKit/NSDraggingSession.cs上的源代码):

代码语言:javascript
复制
EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, NSPasteboardReading[], NSDictionary, NSDraggingEnumerator)

因为classes参数应该是类定义的数组,而不是实例。使用此版本

代码语言:javascript
复制
EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, NSArray, NSDictionary, NSDraggingEnumerator)

classes数组可以像这样创建:

代码语言:javascript
复制
var classesArray = NSArray.FromIntPtrs(new IntPtr[] {
    ObjCRuntime.Class.GetHandle(typeof(NSPasteboardItem))
});

还没有对此进行测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59720746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档