GTKSharp中的CSS样式

时间:2017-06-14 14:45:06

标签: c# css gtk3 gtk#

我正在使用VS2017中的GTKSharp将C / GTK + GUI应用程序转换为C#。我已经通过NuGet安装了这个包https://www.nuget.org/packages/GtkSharp/3.1.3

以下是我加载CSS的方法(应用程序使用Glade文件来定义接口):

    static void Main(string[] args)
    {
        new Program(args);
    }

    public Program(string[] args)
    {
        Application.Init();

        builder = new Builder();
        Gtk.CssProvider provider = new CssProvider();
        builder.AddFromFile("interface.glade");
        provider.LoadFromPath("style.css");
        builder.Autoconnect(this);

        Gtk.Window window = (Gtk.Window)builder.GetObject("start"); 
        Gtk.StyleContext.AddProviderForScreen(Gdk.Screen.Default, provider, 800); // couldn't find the equivalent to GTK_STYLE_PROVIDER_PRIORITY_USER so I set the priority to a random number
        window.Show();

        Application.Run();
    }

选择器名称似乎与GTK +不同。例如,

    window {
     ...
    }

适用于C / GTK +,但不适用于C#,而

    GtkWindow {
     ...
    }

适用于C#但不适用于C / GTK +。然后有一些小部件我似乎根本没有风格。例如,

    button {
     ...
    }

适用于GTK +,但

    GtkButton {
     ...
    }

在C#中不起作用。我找不到任何关于GTK#如何处理CSS样式的文档,所以我认为它与GTK +相同。有什么指针吗?

2 个答案:

答案 0 :(得分:0)

GTKSharp似乎更像是预期的GTK3行为。

Here is the reference manual from developer.gnome.org

特别有用的应该是Table 1. Selector syntax部分。

简而言之,元素以GTK类名称命名:GtkButton,GtkLabel等。

对于默认GTK3 wigets check out the docs talbe of content.的班级列表。

GTK按钮是一个容器wiget,它不会渲染背景,因此如果没有看到您尝试使用该选择器应用的实际CSS属性,我无法告诉您它为什么不起作用,但所以您可能需要单独设置内容的样式。例如

GtkButton GtkLabel {
    color: lime;
}

选择器本身GtkButton应该是正确的。

答案 1 :(得分:0)

这是一个版本问题。

GTK#的版本3.22正确检测到GtkButton选择器。我使用的是GTK 3.14的原生库。有一个unlisted NuGet package为3.22版本提供了win32库。奇怪的是,该版本检测到旧的"按钮","窗口" ...而不是" GtkButton"," GtkWindow" .. 。tags。