GTK+ Glade 和 CSS

GTK+ Glade and CSS

我为我的程序制作了一个简单的林间空地 UI 文件。它包含 2 个文本字段和 1 个按钮。我还制作了一个 css 样式,其中包含 1 个名为 "button" 的按钮 class。当我在 Glade 中将此文件添加为 "Custom CSS provider" 时,它改变了我在编辑器中的按钮样式。

之后我使用 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 应用到我的 Builder UI?

你快到了;最后一步是获取 GtkCssProvider 并将其添加到 GtkStyleContext。

由于您使用的是 .ui 文件和 .css 文件,我假设您想让 CSS 应用于应用程序中的所有小部件。在这种情况下,您可以使用 gtk_style_context_add_provider_for_screen(),将 gdk_screen_get_default() 作为 GdkScreen 传递。 (这应该是安全的;这就是 GTK+ Inspector 所做的。IIRC 有一个更具体的原因说明为什么这应该是安全的...)

您也可以使用 gtk_widget_get_style_context()gtk_style_context_add_provider() 对单个小部件执行此操作。

在这两种情况下,使用 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION 作为 application-local CSS 的优先级。

(我不知道 C# 名称;抱歉。)