2017-02-19 32 views
1

Я сделал простой файл сглаживания для моей программы. Он содержит 2 текстовых поля и 1 кнопку. А также я создал стиль css, который содержит 1 кнопочный класс с именем «кнопка». Когда я добавил этот файл в Glade как «пользовательский поставщик CSS», он изменил стиль кнопки в редакторе.GTK + Glade и CSS

После этого я создал пользовательский интерфейс с использованием GtkBuilder (я использую привязки GTK # 3.20 + C#).

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

Он создал мою простую форму (2 поля и 1 кнопку), но к ней не применяется стиль CSS. Поэтому я проверил XML код моего файла UI и обнаружил, что там нет ссылки на CSS Зависит это:

<style> 
     <class name="button"/> 
</style> 

После того, что я прочитал, что мне нужно CssProvider. Поэтому я создал его.

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

Но ничего не произошло. Итак, как мне применить пользовательский CSS к моему пользовательскому интерфейсу Builder?

ответ

3

Вы почти находитесь; последний шаг - взять GtkCssProvider и добавить его в GtkStyleContext.

Поскольку вы используете файл .ui и файл .css, я предполагаю, что вы хотите сделать свой CSS применимым ко всем виджетам приложения. В этом случае вы можете использовать gtk_style_context_add_provider_for_screen(), минуя gdk_screen_get_default() как GdkScreen. (Это должно быть безопасно, это то, что делает ГТК + Инспектор. IIRC была более конкретная причина, почему это должно быть безопасным ...)

Вы также можете сделать это с помощью отдельных виджетов, используя gtk_widget_get_style_context() и gtk_style_context_add_provider().

В обоих случаях используйте GTK_STYLE_PROVIDER_PRIORITY_APPLICATION в качестве приоритета для прикладного локального CSS.

(Я не знаю названия C#, извините.)

+0

О, боже, спасибо! Оно работает! Очень ценю ваш ответ! –