如何在GTK#中通过MonoDevelop的Stetic GUI设计器增大菜单栏文本尺寸?
解决GTK#菜单栏文本尺寸无法增大的问题
我之前也踩过这个GTK#的小坑!你直接给MainMenuBar调用ModifyFont()不生效,是因为菜单栏的文本实际上是由里面的Gtk.MenuItem控件负责渲染的,MenuBar本身只是个容器,不会把字体样式自动传递给它的子项。
要解决这个问题,你需要遍历菜单栏里的所有MenuItem(包括子菜单里的项),逐个给它们设置字体。这里有个递归方法可以帮你搞定:
public static void SetMenuFont(Gtk.Widget menuWidget, FontDescription fontDesc) { // 处理MenuBar的顶层菜单项 if (menuWidget is Gtk.MenuBar menuBar) { foreach (var child in menuBar.Children) { if (child is Gtk.MenuItem menuItem) { menuItem.ModifyFont(fontDesc); // 如果菜单项有子菜单,递归设置子菜单的字体 if (menuItem.Submenu != null) { SetMenuFont(menuItem.Submenu, fontDesc); } } } } // 处理子菜单(Menu类型)里的项 else if (menuWidget is Gtk.Menu menu) { foreach (var child in menu.Children) { if (child is Gtk.MenuItem menuItem) { menuItem.ModifyFont(fontDesc); if (menuItem.Submenu != null) { SetMenuFont(menuItem.Submenu, fontDesc); } } } } }
然后用你之前定义好的Font()方法生成字体,再调用这个递归方法就可以了:
var testFont = Font("Verdana", 24); SetMenuFont(MainMenuBar, testFont);
这样不管是顶层菜单栏还是下拉子菜单里的文本,都会统一变大啦。
内容的提问来源于stack exchange,提问作者Jimbo Jones
相关产品推荐
相关产品推荐

