首页 > 解决方案 > GTKSharp,使用 Mondevelop,Stetic GUI Designer 增加菜单栏的文本大小

问题描述

我想知道是否有人可以帮助我。我想弄清楚如何使用单声道开发增加菜单栏中的文本。我可以增加标签中文本的大小等使用

public static FontDescription Font(string Family, int Size, Pango.Style Sty = Pango.Style.Normal)
{
    var F = new FontDescription
    {
        Family = Family,
        Size = Convert.ToInt32(Size * Pango.Scale.PangoScale),
        Style = Sty
    };
    return F;
}

接着:

 var test = Font("Verdana", 24);
 label1.ModifyFont(test);

但是当我这样做时它不会工作

MainMenuBar.ModifyFont(test);

无法使用菜单栏增加文本的大小

标签: c#monodevelopgtk#

解决方案


您可以使用小部件ModifyFont ( Pango.FontDescription fd )。此方法在所有类中都可用,因为它派生自Widget

但是,您不能更改MenuBar的字体并期望所有子MenuItem的字体。这甚至不适用于MenuItem:您必须更改其中的Label,通常可由MenuItem.Child访问。

我准备了一对可以解决问题的函数:

public static void ChangeContainerFont(Gtk.Container container, string fontDesc)
{
    ChangeWidgetFont( container, fontDesc );

    foreach(Gtk.Widget subw in container.Children) {
        ChangeWidgetFont( subw, fontDesc );

        if ( subw is Gtk.MenuItem menuItem ) {
            var subMenu = menuItem.Submenu;
            ChangeContainerFont( menuItem, fontDesc );

            if ( subMenu is Gtk.Container subContainer ) {
                ChangeContainerFont( subContainer, fontDesc );
            } else {
                if ( subMenu != null ) {
                    ChangeWidgetFont( subMenu, fontDesc );
                }
            }
        } else
        if ( subw is Gtk.Container subContainer ) {
            ChangeContainerFont( subContainer, fontDesc );
        }
    }
}

public static void ChangeWidgetFont(Gtk.Widget w, string fontDesc)
{
    w.ModifyFont( Pango.FontDescription.FromString( fontDesc ) );
}

您可以在构建 UI 后以编程方式调用ChangeContainerFont(c, s)(给您的菜单栏一个直观的名称,例如menuBar):

ChangeContainerFont( menuBar, "Times 22" );

这将贯穿所有MenuItem内部,一旦到达不是容器的 wiget 就会停止。例如,MenuBarMenuItem是容器(前者包含MenuItem,后者至少包含一个Label),而Label不是。

希望这可以帮助。


推荐阅读