在运行时更改主题

时间:2016-07-29 12:25:46

标签: linux gtk#

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

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

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