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