GTK#(GTK Sharp 2.12)Radiobutton字体

时间:2015-06-30 00:49:59

标签: c# mono gtk#

我一直在讨论这个问题,但如果它不重要,我通常会忽略它。我现在终于需要真正解决这个问题,而不是忽略或解决它。基本上就是这个......

我无法找到更改CheckButton或RadioButton字体的方法。 ToggleButton也可能存在这个问题,因为前两个都位于层次结构中的下面(http://www.mono-project.com/docs/gui/gtksharp/widgets/widget-hierarchy/),我也无法更改父Button小部件的字体。

更改窗口小部件字体的典型方法是使用ModifyFont(...)方法,但显然在这种情况下不起作用。

有没有人有一个解决此问题的正常工作代码示例?我不知所措,我不想写自定义小工具。

谢谢大家。

2 个答案:

答案 0 :(得分:3)

修改

我明白了。按钮显然没有任何文本,但任何按钮的文本都是子标签小部件。 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);

答案 1 :(得分:0)

Skyler Brandt成功回答了我最初的问题,所以所有人都归功于他!我还遇到了另外两个问题,我找到了答案,并想在这里发布解决方案以防其他人需要它们。

(原始问题解决,谢谢Skyler) 更改RadioButton / CheckButton / ToggleButton字体。

radioButton1.Child.ModifyFont(FontDescription.FromString("whatever"));

(新问题#1,已解决) 更改Treeview列标题字体。

TreeViewColumn column1 = new TreeViewColumn();
Label label1 = new Label("My Awesome Label");
label1.ModifyFont(FontDescription.FromString("whatever"));
label1.Show();
column1.Widget = label1;

(新问题#2,已解决) 更改常规按钮字体。 这个有点毛茸茸,因为按钮的标签是层次结构中的一个伟大的子窗口小部件。最简单的方法是为Gtk.Button创建一个扩展方法,以方便使用。如果有人有更好的方法,请告诉我。 (Skylar指出,他能够使用与radiobutton相同的方法更改常规按钮的字体;但是,我无法做到。我不确定是什么原因。)

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