c# - 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);
解决方案
您可以使用小部件。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 就会停止。例如,MenuBar或MenuItem是容器(前者包含MenuItem,后者至少包含一个Label),而Label不是。
希望这可以帮助。
推荐阅读
- reactjs - 如何在鼠标悬停的情况下显示/隐藏antd卡中的额外部分?
- python - 在 python 虚拟环境中 AWS S3 访问被拒绝
- batch-file - 如何使delphi VCL应用程序从命令行运行
- javascript - 不同表中的 Hilghligth 列和行
- javascript - 延迟加载多个嵌入 vimeo 视频
- javascript - 如何根据所选选项在数据库 MySQL 的文本框中显示数据?
- webrtc - UFW 端口转发不适用于我的 coturn 设置
- vscode-extensions - 从 Azure Data Studio 扩展中执行 SQL?
- java - 无法解析符号“响应”
- python - 不理解 OpenCV GitHub Wiki 的“TensorFlow 对象检测”