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# 名称;抱歉。)
我为我的程序制作了一个简单的林间空地 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# 名称;抱歉。)