GTK# (GTK Sharp 2.12) 单选按钮字体
GTK# (GTK Sharp 2.12) Radiobutton Font
我一直 运行 关注这个问题,但如果它不重要,我通常会忽略它。我现在终于需要 真正解决 这个问题,而不是忽略或解决它。基本上就是这样...
我找不到更改 CheckButton 或 RadioButton 字体的方法。 ToggleButton 也可能存在此问题,因为前两个按钮都位于它的层次结构中 (http://www.mono-project.com/docs/gui/gtksharp/widgets/widget-hierarchy/),而且我也无法更改父 Button 小部件的字体。
更改小部件字体的典型方法是使用 ModifyFont(...) 方法,但显然在这种情况下不起作用。
是否有人有解决此问题的有效代码示例?我不知所措,我不想编写自定义小部件。
谢谢大家
编辑
我明白了。按钮显然没有任何文本,但任何按钮的文本都是一个子标签小部件。 radiobutton1.Child.ModifyFont (Pango.FontDescription.FromString ("Comic Sans MS 10"))
更改了单选按钮的字体。
上一个答案
我发现了一个粗略的技巧,可以更改绘制的每个小部件的字体:button1.Settings.FontName = "Comic Sans MS 10"
。 设置 是全局的属性 并覆盖RC 文件信息。不过,这可能没什么帮助。
我尝试了其他几种更改字体的方法,但都没有成功。
button1.PangoContext.FontDescription = Pango.FontDescription.FromString ("Comic Sans MS 10");
button1.ModifierStyle.FontDesc = Pango.FontDescription.FromString ("Comic Sans MS 10");
RcStyle style = new RcStyle ();
style.FontDesc = Pango.FontDescription.FromString ("Comic Sans MS 10");
button1.ModifyStyle (style);
Skyler Brandt 成功地回答了我的第一个问题,所以这一切都归功于他!我还遇到了另外两个问题,我找到了答案并希望 post 此处提供解决方案,以防其他人需要它们。
(原始问题已解决,感谢 Skyler)
更改 RadioButton/CheckButton/ToggleButton 字体。
radioButton1.Child.ModifyFont(FontDescription.FromString("whatever"));
(新问题 #1,已解决)
更改 Treeview 列 header 字体。
TreeViewColumn column1 = new TreeViewColumn();
Label label1 = new Label("My Awesome Label");
label1.ModifyFont(FontDescription.FromString("whatever"));
label1.Show();
column1.Widget = label1;
(新问题 #2,已解决)
更改常规按钮字体。
这个有点麻烦,因为按钮的标签是层次结构中的 great-grand child 小部件。最简单的做法是为 Gtk.Button 创建一个扩展方法以便于使用。如果有人有更好的方法请告诉我。 (Skylar 指出他可以使用与单选按钮相同的方法更改常规按钮的字体;但是,我做不到。我不确定那是怎么回事。)
public static void ModifyLabelFont(this Gtk.Button button, string fontDescription)
{
foreach(Widget child in button.AllChildren)
{
if(child.GetType() != (typeof(Gtk.Alignment)))
continue;
foreach(Widget grandChild in ((Gtk.Alignment)child).AllChildren)
{
if(grandChild.GetType() != (typeof(Gtk.HBox)))
continue;
foreach(Widget greatGrandChild in ((Gtk.HBox)grandChild).AllChildren)
{
if(greatGrandChild.GetType() != (typeof(Gtk.Label)))
continue;
string text = ((Gtk.Label)greatGrandChild).Text;
((Gtk.HBox)grandChild).Remove(greatGrandChild);
Label label = new Label(text);
label.ModifyFont(FontDescription.FromString(fontDescription));
label.Show();
((Gtk.HBox)grandChild).Add(label);
}
}
}
}
我一直 运行 关注这个问题,但如果它不重要,我通常会忽略它。我现在终于需要 真正解决 这个问题,而不是忽略或解决它。基本上就是这样...
我找不到更改 CheckButton 或 RadioButton 字体的方法。 ToggleButton 也可能存在此问题,因为前两个按钮都位于它的层次结构中 (http://www.mono-project.com/docs/gui/gtksharp/widgets/widget-hierarchy/),而且我也无法更改父 Button 小部件的字体。
更改小部件字体的典型方法是使用 ModifyFont(...) 方法,但显然在这种情况下不起作用。
是否有人有解决此问题的有效代码示例?我不知所措,我不想编写自定义小部件。
谢谢大家
编辑
我明白了。按钮显然没有任何文本,但任何按钮的文本都是一个子标签小部件。 radiobutton1.Child.ModifyFont (Pango.FontDescription.FromString ("Comic Sans MS 10"))
更改了单选按钮的字体。
上一个答案
我发现了一个粗略的技巧,可以更改绘制的每个小部件的字体:button1.Settings.FontName = "Comic Sans MS 10"
。 设置 是全局的属性 并覆盖RC 文件信息。不过,这可能没什么帮助。
我尝试了其他几种更改字体的方法,但都没有成功。
button1.PangoContext.FontDescription = Pango.FontDescription.FromString ("Comic Sans MS 10");
button1.ModifierStyle.FontDesc = Pango.FontDescription.FromString ("Comic Sans MS 10");
RcStyle style = new RcStyle ();
style.FontDesc = Pango.FontDescription.FromString ("Comic Sans MS 10");
button1.ModifyStyle (style);
Skyler Brandt 成功地回答了我的第一个问题,所以这一切都归功于他!我还遇到了另外两个问题,我找到了答案并希望 post 此处提供解决方案,以防其他人需要它们。
(原始问题已解决,感谢 Skyler) 更改 RadioButton/CheckButton/ToggleButton 字体。
radioButton1.Child.ModifyFont(FontDescription.FromString("whatever"));
(新问题 #1,已解决) 更改 Treeview 列 header 字体。
TreeViewColumn column1 = new TreeViewColumn();
Label label1 = new Label("My Awesome Label");
label1.ModifyFont(FontDescription.FromString("whatever"));
label1.Show();
column1.Widget = label1;
(新问题 #2,已解决) 更改常规按钮字体。 这个有点麻烦,因为按钮的标签是层次结构中的 great-grand child 小部件。最简单的做法是为 Gtk.Button 创建一个扩展方法以便于使用。如果有人有更好的方法请告诉我。 (Skylar 指出他可以使用与单选按钮相同的方法更改常规按钮的字体;但是,我做不到。我不确定那是怎么回事。)
public static void ModifyLabelFont(this Gtk.Button button, string fontDescription)
{
foreach(Widget child in button.AllChildren)
{
if(child.GetType() != (typeof(Gtk.Alignment)))
continue;
foreach(Widget grandChild in ((Gtk.Alignment)child).AllChildren)
{
if(grandChild.GetType() != (typeof(Gtk.HBox)))
continue;
foreach(Widget greatGrandChild in ((Gtk.HBox)grandChild).AllChildren)
{
if(greatGrandChild.GetType() != (typeof(Gtk.Label)))
continue;
string text = ((Gtk.Label)greatGrandChild).Text;
((Gtk.HBox)grandChild).Remove(greatGrandChild);
Label label = new Label(text);
label.ModifyFont(FontDescription.FromString(fontDescription));
label.Show();
((Gtk.HBox)grandChild).Add(label);
}
}
}
}