0
由于ImageMenuItem
在GTK3中已弃用,因此我正在寻找替换品。我试图采取一个简单的MenuItem
,并将Image
和AccelLabel
包装进去。 (请参阅下面的示例。)虽然这在整体上仍然有效,但仍存在两个问题:替换为ImageMenuItem
- 加速键不显示在菜单项中。
- 这个图标还有很大的余量。
在下面的例子中,File|Open
项目是使用过时ImageMenuItem
,而File|New
项目是我尝试用MenuItem
得到相同的结果产生。
我缺少什么使MenuItem
看起来像ImageMenuItem
?
class Program {
public static void Main()
{
Gtk.Application.Init();
var win = new Gtk.Window("test");
var mb = new Gtk.MenuBar();
var accels = new Gtk.AccelGroup();
win.AddAccelGroup(accels);
var fileMenu = new Gtk.MenuItem("File");
mb.Add(fileMenu);
var fileSubmenu = new Gtk.Menu();
fileMenu.Submenu = fileSubmenu;
//
// File | New
//
var fileNew = new Gtk.MenuItem();
fileSubmenu.Add(fileNew);
fileNew.AddAccelerator(
"activate", accels,
new Gtk.AccelKey(Gdk.Key.n, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible));
fileNew.Activated += (s,e) => System.Console.WriteLine("New ...");
var fileNewIcon = new Gtk.Image();
fileNewIcon.SetFromIconName("document-new", Gtk.IconSize.Menu);
var fileNewLabel = new Gtk.AccelLabel("New");
fileNewLabel.AccelWidget = fileNew;
var hbox = new Gtk.HBox(false, 4);
hbox.PackStart(fileNewIcon, false, false, 0);
hbox.PackStart(fileNewLabel, false, false, 0);
fileNew.Add(hbox);
//
// File | Open
//
var fileOpen = new Gtk.ImageMenuItem("Open", accels);
var fileOpenIcon = new Gtk.Image();
fileOpenIcon.SetFromIconName("document-open", Gtk.IconSize.Menu);
fileOpen.Image = fileOpenIcon;
fileOpen.AddAccelerator(
"activate", accels,
new Gtk.AccelKey(Gdk.Key.o, Gdk.ModifierType.ControlMask, Gtk.AccelFlags.Visible));
fileOpen.Activated += (s,e) => System.Console.WriteLine("Open ...");
fileSubmenu.Add(fileOpen);
win.Add(mb);
win.ShowAll();
win.DeleteEvent += (s,e) => Gtk.Application.Quit();
Gtk.Application.Run();
}
}
好吧,'fileSubmenu.ReserveToggleSize = false;'正在工作。但加速器(这将是'fileNewLabel.Xalign = 0.0f;')不显示... –
对不起,我错过了你添加到hboy的项目不同,修复它。 – Kyto
嗯...不起作用。恐怕我不明白箱子的包装与加速器钥匙的可视性有什么关系。 –