我正在使用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 +相同。有什么指针吗?
答案 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。