2017-06-14 3 views
1

Je convertis une application graphique C/GTK + en C# en utilisant GTKSharp dans VS2017. J'ai installé ce paquet https://www.nuget.org/packages/GtkSharp/3.1.3 via NuGet.Style CSS dans GTKSharp

Voilà comment je charge le CSS (l'application utilise un fichier Glade pour définir l'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(); 
    } 

Les noms de sélection semblent être différentes de GTK +. Par exemple,

window { 
    ... 
    } 

travaux en C/GTK +, mais pas en C#, alors que

GtkWindow { 
    ... 
    } 

travaux en C#, mais pas en C/GTK +. Ensuite, il y a quelques widgets que je n'arrive pas à coiffer. Par exemple,

button { 
    ... 
    } 

œuvres dans GTK +, mais

GtkButton { 
    ... 
    } 

ne fonctionne pas en C#. Je n'ai trouvé aucune documentation sur la façon dont GTK # gère le style CSS, alors j'ai pensé que ce serait le même que GTK +. Des pointeurs?

Répondre

0

Le GTKSharp ressemble plus à un comportement attendu de GTK3.

Here is the reference manual from developer.gnome.org

Espcially utile devrait être la section Table 1. Selector syntax.

En bref, les éléments sont nommés d'après le nom de la classe GTK: GtkButton, GtkLabel et ainsi de suite.

Pour une liste de classe par défaut GTK3 wigets check out the docs talbe of content.. Le bouton GTK est un wiget conteneur qui ne rend pas l'arrière-plan sans voir les propriétés CSS que vous essayez d'appliquer à l'aide de ce sélecteur. Je ne peux pas vous dire pourquoi cela ne fonctionne pas, mais vous devrez peut-être styliser il se contente séparément. Par exemple. Le sélecteur GtkButton devrait être correct.

0

C'était un problème de version.

La version 3.22 de GTK # détecte correctement le sélecteur GtkButton. J'utilisais les bibliothèques natives de GTK 3.14. Il y en a un unlisted NuGet package qui fournit des bibliothèques win32 pour la version 3.22. Curieusement, cette version détecte l'ancien "bouton", "fenêtre" ... au lieu des balises "GtkButton", "GtkWindow" ....