GTKSharp, Увеличение размера текста строки меню с помощью Mondevelop, Stetic GUI Designer - PullRequest
0 голосов
/ 30 мая 2018

Мне интересно, может ли кто-нибудь мне помочь.Я пытаюсь понять, как увеличить текст в строке меню с помощью моно разработки.Я могу увеличить размер текста в метках и т. Д., Используя

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);

Cant Increase the size of the text with the menu bar

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете использовать Виджет . ModifyFont ( Pango.FontDescription fd ).Этот метод доступен во всех классах, поскольку он является производным от Widget .

Однако вы не можете изменить шрифт MenuBar и ожидать, что все дочерние элементы MenuItem Шрифты.Это даже не работает для MenuItem : вы должны изменить Label внутри него, обычно доступный для MenuItem.Child .

Iподготовили пару функций, которые делают трюк:

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 ) );
}

Вы можете программно вызвать ChangeContainerFont (c, s) после создания пользовательского интерфейса (дайте вашей строке меню интуитивно понятное имянапример, menuBar ):

ChangeContainerFont( menuBar, "Times 22" );

Это будет проходить через все MenuItem внутри, останавливаясь, как только он достигает виджета, который не является контейнером.Например, MenuBar или MenuItem являются контейнерами (первый содержит MenuItem , второй содержит по крайней мере Label ), а Метка отсутствует.

Надеюсь, это поможет.

...