我有一个 Gtk 滚动窗口,我正在尝试附加一个 PopupMenuHandler 函数,如下所示:
this.scrolledwindow1.PopupMenu += HandlePopupMenu;
HandlePopupMenu 看起来像这样:
[GLib.ConnectBefore]
public void HandlePopupMenu(object o, PopupMenuArgs args)
{
Console.WriteLine("test");
Gtk.Menu mbox = new Gtk.Menu();
Gtk.MenuItem Test = new Gtk.MenuItem("test");
Test.Activated += delegate(object sender, EventArgs e) {
Console.WriteLine("test");
};
mbox.Append(Test);
mbox.ShowAll();
mbox.Popup();
}
我的问题是,当我右键单击滚动窗口时,此事件永远不会被调用。我假设它应该基于 this .只有一个其他事件处理 ScrollEvent,没有处理键盘或鼠标按钮的事件。谁能告诉我为什么这不起作用?
最佳答案
1) 不要将弹出菜单添加到 GtkScrolledWindow
而是添加到它的内容中。它的大部分事件在默认情况下是禁用的,通常,用户真的不希望他们的滚动条上出现任何弹出窗口。
2) PopupMenu
信号仅针对键盘快捷键(Shift+F10 或菜单按钮)调用,而不是鼠标右键单击。 GtkStatusIcon
不是从 GtkWidget
派生的,所以它的工作方式不同。
您需要实现 ButtonPressEvent
和 PopupMenu
信号来让鼠标和键盘同时显示菜单。 GTK+ documentation on implementing popup menu (C, not C# though).
关于c# - Gtk 中的弹出菜单#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1143373/