2016-07-29 95 views
0

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

有没有办法做到这一点?

回答

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

更好地使用'StyleContext.AddProviderForScreen'而不是'AddProvider'来递归地知道谁知道有多少个小部件。 – ptomato