4

我有一个 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,没有处理键盘或鼠标按钮。谁能告诉我为什么这不起作用?

4

1 回答 1

2

1)不要将弹出菜单添加GtkScrolledWindow到它的内容中。默认情况下,它的大部分事件都被禁用,通常,用户真的不希望在他们的滚动条上出现任何弹出窗口。

2)PopupMenu仅对键盘快捷键(Shift+F10 或菜单按钮)调用信号,而不是鼠标右键单击。GtkStatusIcon不是源自GtkWidget所以它的工作方式不同。

您需要实现ButtonPressEventPopupMenu信号以使鼠标和键盘都显示菜单。关于实现弹出菜单的 GTK+ 文档(虽然是 C,但不是 C#)。

于 2009-07-20T14:03:35.547 回答