CSS styling in GTKSharp

本小妞迷上赌 提交于 2020-01-04 05:27:10

问题


I'm converting a C/GTK+ GUI application to C# using GTKSharp in VS2017. I've installed this package https://www.nuget.org/packages/GtkSharp/3.1.3 via NuGet.

Here's how I load up the CSS (the application uses a Glade file to define the interface):

    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();
    }

The selector names seem to be different from GTK+. For example,

    window {
     ...
    }

works in C/GTK+ but not in C#, whereas

    GtkWindow {
     ...
    }

works in C# but not in C/GTK+. Then there are a few widgets I can't seem to style at all. For example,

    button {
     ...
    }

works in GTK+ but

    GtkButton {
     ...
    }

does not work in C#. I couldn't find any documentation regarding how GTK# handles CSS styling so I thought it'd be the same as GTK+. Any pointers?


回答1:


The GTKSharp seems more like an expected GTK3 behavior.

Here is the reference manual from developer.gnome.org

Espcially useful should be the Table 1. Selector syntax section.

In short the elements are named after the GTK class name: GtkButton, GtkLabel and so on.

For a class list of default GTK3 wigets check out the docs talbe of content..

The GTK button is a container wiget that doesn't render background so without seeing the actual CSS properties you try to apply using that selector I can't tell you why it doesn't work but so you might need to style it content separately. Eg.

GtkButton GtkLabel {
    color: lime;
}

The selector itself GtkButton should be correct.




回答2:


It was a version issue.

Version 3.22 of GTK# detects the GtkButton selector correctly. I was using GTK 3.14's native libraries. There is one unlisted NuGet package that provides win32 libraries for the 3.22 version. Strangely enough, that version detects the old "button", "window"... instead of the "GtkButton", "GtkWindow"... tags.



来源:https://stackoverflow.com/questions/44548008/css-styling-in-gtksharp

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!