GTKSharp,使用 Mondevelop,Stetic GUI Designer 增加菜单栏的文本大小
GTKSharp, Increasing the text size of a Menu Bar using Mondevelop,Stetic GUI Designer
我想知道是否有人可以帮助我。我想弄清楚如何使用 mono develop 增加菜单栏内的文本。我可以使用
增加标签中文本的大小等
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);
您可以使用 Widget.ModifyFont(Pango.FontDescription fd)。此方法在所有 类 中都可用,因为它派生自 Widget.
但是,您不能更改 MenuBar 的字体并期望所有子 MenuItem 的字体。这甚至不适用于 MenuItem:您必须更改其中的 Label,通常可通过 [=53= 访问].
我已经准备了一对函数来实现这个目的:
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)(给您的菜单栏起一个直观的名称,例如 菜单栏):
ChangeContainerFont( menuBar, "Times 22" );
这将 运行 通过所有 MenuItem 的内部,一旦到达不是容器的 wiget 就会停止。比如MenuBar或者MenuItem都是容器(前者包含MenuItem的,后者包含在至少一个 Label),而 Label 则不是。
希望这对您有所帮助。
我想知道是否有人可以帮助我。我想弄清楚如何使用 mono develop 增加菜单栏内的文本。我可以使用
增加标签中文本的大小等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);
您可以使用 Widget.ModifyFont(Pango.FontDescription fd)。此方法在所有 类 中都可用,因为它派生自 Widget.
但是,您不能更改 MenuBar 的字体并期望所有子 MenuItem 的字体。这甚至不适用于 MenuItem:您必须更改其中的 Label,通常可通过 [=53= 访问].
我已经准备了一对函数来实现这个目的:
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)(给您的菜单栏起一个直观的名称,例如 菜单栏):
ChangeContainerFont( menuBar, "Times 22" );
这将 运行 通过所有 MenuItem 的内部,一旦到达不是容器的 wiget 就会停止。比如MenuBar或者MenuItem都是容器(前者包含MenuItem的,后者包含在至少一个 Label),而 Label 则不是。
希望这对您有所帮助。