c# - Gtk 中的弹出菜单#

标签 c# mono gtk gtk# popupmenu

我有一个 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 派生的,所以它的工作方式不同。

您需要实现 ButtonPressEventPopupMenu 信号来让鼠标和键盘同时显示菜单。 GTK+ documentation on implementing popup menu (C, not C# though).

关于c# - Gtk 中的弹出菜单#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1143373/

相关文章:

c# - MEF逐个加载DLL

c# - 在 Silverlight 中显示文件类型图标

c# - Gtk# TreeView 将单个单元格设置为具有不同的渲染器?

linux - 如何在 Linux 上捆绑 Mono/GTK# 应用程序?

gtk - 如何在单击列标题时对 TreeView 进行排序

c# - 如何在 NpgsqlConnection 中设置编码

c# - 使用 C# 和 MySql 存储密码的最佳方式

c - 无法使用 GTK 编译代码

linux - 在Ubuntu中使用Mono运行电子表格应用

android - Mono for android - Android.OS 和 Android.Provider 程序集?