GTK+ Glade and CSS

3

我为我的程序制作了一个简单的 Glade UI 文件。它包含 2 个文本框和 1 个按钮。此外,我还创建了一个 CSS 样式,其中包含名为 "button" 的 1 个按钮类。当我将此文件作为“自定义 CSS 提供者”添加到 Glade 中时,它改变了编辑器中的按钮样式。

之后,我使用 GtkBuilder 创建了 UI(我使用 GTK# 3.20 绑定 + C#)。

Builder b = new Builder ();
b.AddFromFile ("login.xml");
b.Autoconnect (this);

它创建了一个简单的表单(2个字段和1个按钮),但是没有应用CSS样式。所以我检查了我的UI文件的XML代码,并发现除了这个之外,没有任何参考CSS的内容:
<style>
      <class name="button"/>
</style>

之后我发现需要使用CssProvider,于是我创建了一个。

CssProvider css = new CssProvider ();
css.LoadFromPath ("ui_common.css");

但是没有任何反应。那么,我该如何将自定义CSS应用于我的构建者UI?

1个回答

8
你已经接近成功了,最后一步是将GtkCssProvider添加到GtkStyleContext中。
由于你正在使用 .ui 文件和 .css 文件,我假设你想要让CSS应用于应用程序中的所有小部件。在这种情况下,可以使用gtk_style_context_add_provider_for_screen(),将gdk_screen_get_default()作为GdkScreen传递。(这应该是安全的;这就是GTK+ Inspector所做的。如果我没记错的话,这更具体的原因是为什么这是安全的。)
你也可以使用gtk_widget_get_style_context()和gtk_style_context_add_provider()来针对单个小部件执行此操作。
在两种情况下,使用GTK_STYLE_PROVIDER_PRIORITY_APPLICATION作为应用程序本地CSS的优先级。
(我不知道C#的名称;抱歉。)

我的天啊,谢谢!它起作用了!非常感谢你的回答! - vetrov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接