我正在测试一个看起来像这样的窗口:
将标签拖到卡片可将标签链接到卡片。将卡片拖到标签也是如此。
在两张卡片之间放置标签或在两个标签之间放置一张卡片是没有意义的。我可以在 Handle...DataReceived
函数中忽略这些结果,如下所示:
if (dropPos != TreeViewDropPosition.IntoOrAfter &&
dropPos != TreeViewDropPosition.IntoOrBefore)
return;
但是,在拖动时,用户仍然会看到插入的选项:
如何防止这种情况发生?
最佳答案
您需要连接到 drag-motion
信号并更改默认行为,这样它就永远不会指示放下之前/之后:
def _drag_motion(self, widget, context, x, y, etime):
drag_info = widget.get_dest_row_at_pos(x, y)
if not drag_info:
return False
path, pos = drag_info
if pos == gtk.TREE_VIEW_DROP_BEFORE:
widget.set_drag_dest_row(path, gtk.TREE_VIEW_DROP_INTO_OR_BEFORE)
elif pos == gtk.TREE_VIEW_DROP_AFTER:
widget.set_drag_dest_row(path, gtk.TREE_VIEW_DROP_INTO_OR_AFTER)
context.drag_status(context.suggested_action, etime)
return True
关于c# - 在 Gtk 中,在 TreeView 中使用拖放时,如何避免在行之间拖放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209650/