我一直在讨论这个问题,但如果它不重要,我通常会忽略它。我现在终于需要真正解决这个问题,而不是忽略或解决它。基本上就是这个......
我无法找到更改CheckButton或RadioButton字体的方法。 ToggleButton也可能存在这个问题,因为前两个都位于层次结构中的下面(http://www.mono-project.com/docs/gui/gtksharp/widgets/widget-hierarchy/),我也无法更改父Button小部件的字体。
更改窗口小部件字体的典型方法是使用ModifyFont(...)方法,但显然在这种情况下不起作用。
有没有人有一个解决此问题的正常工作代码示例?我不知所措,我不想写自定义小工具。
谢谢大家。
答案 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);
}
}
}
}