c# - 在 Gtk 中,在 TreeView 中使用拖放时,如何避免在行之间拖放?

标签 c# drag-and-drop gtk gtk# gtktreeview

我正在测试一个看起来像这样的窗口:

alt text

将标签拖到卡片可将标签链接到卡片。将卡片拖到标签也是如此。

在两张卡片之间放置标签或在两个标签之间放置一张卡片是没有意义的。我可以在 Handle...DataReceived 函数中忽略这些结果,如下所示:

if (dropPos != TreeViewDropPosition.IntoOrAfter &&
    dropPos != TreeViewDropPosition.IntoOrBefore)
    return;

但是,在拖动时,用户仍然会看到插入的选项:

alt text

如何防止这种情况发生?

最佳答案

您需要连接到 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/

相关文章:

c# - 如何配置 Teamcity 忽略一些测试

javascript - 即使使用捕获阶段,OnDrop 事件目标也是子对象

java - 在 JPanel 周围移动 JLabel

python gtk多窗口

gtk style/gtkrc 相关问题

c# - native 和托管析构函数

c# - 将公共(public)属性用于内部和公共(public)使用还是分开使用?

WPF 从具有 SelectionMode=Extended 的 ListBox 拖放

php - 今天是否在使用 PHP-GTK?如果是,它用于什么用途或可用于什么用途?

c# - VS2012 和 VS2015 浮点/ double 转换的区别