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
嗯...不起作用。恐怕我不明白箱子的包裝與加速器鑰匙的可視性有什麼關係。 –