2016-07-29 76 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