在运行时更改主题

Change the theme at runtime

我在 Linux 下有一个 GTK# 3 应用程序,我想强制从应用程序而不是系统中选择一个主题。

有办法实现吗?

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