0
У меня есть приложение GTK # 3 под Linux, и я хотел бы заставить тему, выбранную из приложения, а не системную.Измените тему во время выполнения
Есть ли способ достичь этого?
У меня есть приложение GTK # 3 под Linux, и я хотел бы заставить тему, выбранную из приложения, а не системную.Измените тему во время выполнения
Есть ли способ достичь этого?
GTK # 3 может загрузить CSS тему во время выполнения, и вы можете рекурсивно применить его ко всем детям виджета.
var cssProvider = new CssProvider();
cssProvider.LoadFromData(yourCssThemeAsString);
ApplyCssRecursively(window, cssProvider, UInt32.MaxValue);
static void ApplyCssRecursively(Widget widget, IStyleProvider provider, uint priority)
{
widget.StyleContext.AddProvider(provider, priority);
var container = widget as Container;
if (container == null) return;
foreach (var child in container.Children)
ApplyCssRecursively(child, provider, priority);
}
Лучше использовать 'StyleContext.AddProviderForScreen' один раз, вместо' AddProvider' рекурсивно, кто знает, сколько виджетов. – ptomato