2017-06-14 76 views
1

我正在使用VS2017中的GTKSharp將C/GTK + GUI應用程序轉換爲C#。我已經通過NuGet安裝了這個軟件包https://www.nuget.org/packages/GtkSharp/3.1.3GTKSharp中的CSS樣式

下面是如何加載了CSS(應用程序使用格萊德文件來定義的接口):

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#中,而在C#

GtkWindow { 
    ... 
    } 

的作品,但不是在C/GTK +。然後有一些我根本看不到的款式。例如,

button { 
    ... 
    } 

作品在GTK +,但

GtkButton { 
    ... 
    } 

不會在C#中工作。我找不到有關GTK#如何處理CSS樣式的任何文檔,因此我認爲它與GTK +相同。任何指針?

回答

0

GTKSharp看起來更像是一個預期的GTK3行爲。

Here is the reference manual from developer.gnome.org

Espcially有用應該是Table 1. Selector syntax部。

簡而言之,這些元素以GTK類名稱命名:GtkButton,GtkLabel等等。

對於缺省GTK3 wigets check out the docs talbe of content.的班級列表。

GTK按鈕是一個容器wiget,它不會呈現背景,因此如果沒有看到您嘗試使用該選擇器應用的實際CSS屬性,我不能告訴您爲什麼它不起作用,但您可能需要樣式它分開內容。例如。

GtkButton GtkLabel { 
    color: lime; 
} 

選擇器本身GtkButton應該是正確的。

0

這是一個版本問題。

GTK#版本3.22正確檢測到GtkButton選擇器。我使用的是GTK 3.14的本地庫。有一個unlisted NuGet package爲3.22版本提供win32庫。奇怪的是,該版本檢測到舊的「按鈕」,「窗口」...而不是「GtkButton」,「GtkWindow」...標籤。