GTK C#小部件更改颜色不工作

GTK C#小部件更改颜色不工作,c#,mono,gtk,gtk#,C#,Mono,Gtk,Gtk#,我试图通过使用更改GTK中按钮小部件的颜色 这是从另一个按钮单击事件调用的,但小部件颜色不会更新 这是为什么?您可以使用ModifyBG方法,而不是“片状”ModifyBase,传递相同的参数 button1.ModifyBG(Statetype.Normal,new Gdk.Color(1,1,1)); 顺便说一句,我说的是flaky,因为你在Mono GTK下处理GTK2.x,而且在“主题化”和Mono方面,双方都有很多问题。GTK3有一个使用CSS方法的组模型,但是Mono发行版仍然停留

我试图通过使用更改GTK中按钮小部件的颜色

这是从另一个按钮单击事件调用的,但小部件颜色不会更新


这是为什么?

您可以使用ModifyBG方法,而不是“片状”ModifyBase,传递相同的参数

button1.ModifyBG(Statetype.Normal,new Gdk.Color(1,1,1));
顺便说一句,我说的是flaky,因为你在Mono GTK下处理GTK2.x,而且在“主题化”和Mono方面,双方都有很多问题。GTK3有一个使用CSS方法的组模型,但是Mono发行版仍然停留在GTK2上。如果您希望以GTK方式对应用程序进行主题化/着色,可以搜索主题化GTK 2.x。注意:如果使用MonoDevelop/XS,请确保您在IDE之外定期测试/运行它,因为应用程序主题将发生变化(这在OS-X上非常明显,而且这个问题可以追溯到很多年前)


如果您有其他小部件在其背景色中“行为”不正确,您可以将它们放置在eventbox小部件中,因为该小部件有背景,而其他小部件可能没有。您可以在Mono电子邮件线程中搜索这种情况,自2007年以来一直如此。

也尝试过这种情况,但不起作用。但在GTK主窗口的情况下,当从GTK主线程调用时,它起作用。我尝试从主线程调用此按钮,但对于小部件“在主线程上的主窗口的情况下工作”仍然不起作用?您“可以”在GTK+主循环线程上设置窗口背景颜色,并且“不是”该窗口的父窗口小部件的背景颜色?假设您正在使用的小部件具有背景(即:不是标签),如果您直接在调用生成的代码(Build()方法)后放置.ModifyBG,小部件的背景是否会改变?
public主窗口():base(Gtk.WindowType.Toplevel){Build();button1.ModifyBg(Gtk.StateType.Normal,new Gdk.Color(255,0,0));}
button1.ModifyBG(Statetype.Normal,new Gdk.Color(1,1,1));