{"id":14965124,"url":"https://github.com/wieslawsoltes/avalonia.thememanager","last_synced_at":"2025-03-03T00:06:17.729Z","repository":{"id":65592148,"uuid":"179481020","full_name":"wieslawsoltes/Avalonia.ThemeManager","owner":"wieslawsoltes","description":"Theme manager for Avalonia applications.","archived":false,"fork":false,"pushed_at":"2024-10-31T17:08:13.000Z","size":133,"stargazers_count":130,"open_issues_count":0,"forks_count":10,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-03T00:06:11.480Z","etag":null,"topics":["avalonia","avaloniaui","c-sharp","gui","manager","multi-platform","theme","themes","xaml"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wieslawsoltes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.TXT","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["wieslawsoltes"]}},"created_at":"2019-04-04T11:05:09.000Z","updated_at":"2025-02-14T16:45:58.000Z","dependencies_parsed_at":"2024-01-15T01:04:31.340Z","dependency_job_id":"b81f695e-487f-44fb-951e-6f871ba578a9","html_url":"https://github.com/wieslawsoltes/Avalonia.ThemeManager","commit_stats":{"total_commits":139,"total_committers":2,"mean_commits":69.5,"dds":"0.20143884892086328","last_synced_commit":"6b03a76c070ba111c84dbb30466aabad377fd15d"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wieslawsoltes%2FAvalonia.ThemeManager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wieslawsoltes%2FAvalonia.ThemeManager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wieslawsoltes%2FAvalonia.ThemeManager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wieslawsoltes%2FAvalonia.ThemeManager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wieslawsoltes","download_url":"https://codeload.github.com/wieslawsoltes/Avalonia.ThemeManager/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241587921,"owners_count":19986627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["avalonia","avaloniaui","c-sharp","gui","manager","multi-platform","theme","themes","xaml"],"created_at":"2024-09-24T13:34:15.468Z","updated_at":"2025-03-03T00:06:17.674Z","avatar_url":"https://github.com/wieslawsoltes.png","language":"C#","funding_links":["https://github.com/sponsors/wieslawsoltes"],"categories":[],"sub_categories":[],"readme":"# Avalonia Theme Manager\n\n[![Build Status](https://dev.azure.com/wieslawsoltes/GitHub/_apis/build/status/wieslawsoltes.Avalonia.ThemeManager?branchName=master)](https://dev.azure.com/wieslawsoltes/GitHub/_build/latest?definitionId=97\u0026branchName=master)\n[![CI](https://github.com/wieslawsoltes/Avalonia.ThemeManager/actions/workflows/build.yml/badge.svg)](https://github.com/wieslawsoltes/Avalonia.ThemeManager/actions/workflows/build.yml)\n\n[![NuGet](https://img.shields.io/nuget/v/Avalonia.ThemeManager.svg)](https://www.nuget.org/packages/Avalonia.ThemeManager)\n[![NuGet](https://img.shields.io/nuget/dt/Avalonia.ThemeManager.svg)](https://www.nuget.org/packages/Avalonia.ThemeManager)\n[![MyGet](https://img.shields.io/myget/avaloniathememanager-nightly/vpre/Avalonia.ThemeManager.svg?label=myget)](https://www.myget.org/gallery/avaloniathememanager-nightly) \n\n[![Github All Releases](https://img.shields.io/github/downloads/wieslawsoltes/avalonia.thememanager/total.svg)](https://github.com/wieslawsoltes/avalonia.thememanager)\n[![GitHub release](https://img.shields.io/github/release/wieslawsoltes/avalonia.thememanager.svg)](https://github.com/wieslawsoltes/avalonia.thememanager)\n[![Github Releases](https://img.shields.io/github/downloads/wieslawsoltes/avalonia.thememanager/latest/total.svg)](https://github.com/wieslawsoltes/avalonia.thememanager)\n\n## About\n\nTheme manager for [Avalonia](https://github.com/AvaloniaUI/Avalonia) applications.\n\n## Usage\n\nTheme manager searches user provided themes directory for `*.xaml` theme files otherwise built-in `Light` and `Dark` theme are used.\n\nThe `ThemeSelector` is created and initalized by calling static `Create` method.\n\nThe `ThemeSelector` uses `Styles[0]` property of `Window` to insert selected theme `Style`.\n\n`App.xaml`\n```XAML\n\u003cApplication x:Class=\"AvaloniaApp.App\"\n             xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\u003e\n    \u003cApplication.Styles\u003e\n        \u003cStyleInclude Source=\"avares://Avalonia.Themes.Default/DefaultTheme.xaml\"/\u003e\n        \u003cStyleInclude Source=\"avares://Avalonia.Themes.Default/Accents/BaseLight.xaml\"/\u003e\n    \u003c/Application.Styles\u003e\n\u003c/Application\u003e\n```\n\n`App.xaml.cs`\n```C#\nusing System;\nusing Avalonia;\nusing Avalonia.Logging.Serilog;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.ThemeManager;\n\nnamespace AvaloniaApp\n{\n    public class App : Application\n    {\n        public static ThemeSelector Selector;\n\n        [STAThread]\n        static void Main(string[] args)\n        {\n            BuildAvaloniaApp().Start(AppMain, args);\n        }\n\n        static void AppMain(Application app, string[] args)\n        {\n            Selector = ThemeSelector.Create(\"Themes\");\n            Selector.LoadSelectedTheme(\"AvaloniaApp.theme\");\n\n            app.Run(new MainWindow());\n\n            Selector.SaveSelectedTheme(\"AvaloniaApp.theme\");\n        }\n\n        public static AppBuilder BuildAvaloniaApp()\n            =\u003e AppBuilder.Configure\u003cApp\u003e()\n                         .UsePlatformDetect()\n                         .UseReactiveUI()\n                         .LogToDebug();\n\n        public override void Initialize()\n        {\n            AvaloniaXamlLoader.Load(this);\n        }\n    }\n}\n```\n\n`MainWindow.xaml`\n```XAML\n\u003cWindow x:Class=\"AvaloniaApp.MainWindow\"\n        xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xmlns:app=\"clr-namespace:AvaloniaApp;assembly=AvaloniaApp\"\n        xmlns:manager=\"clr-namespace:Avalonia.ThemeManager;assembly=Avalonia.ThemeManager\"\n        Title=\"AvaloniaApp\" Width=\"800\" Height=\"600\"\n        Foreground=\"{DynamicResource ThemeForegroundBrush}\"\u003e\n    \u003cWindow.Resources\u003e\n        \u003cmanager:ObjectEqualityMultiConverter x:Key=\"ObjectEqualityMultiConverter\"/\u003e\n    \u003c/Window.Resources\u003e\n    \u003cGrid RowDefinitions=\"Auto,*\"\u003e\n        \u003cMenu Grid.Row=\"0\"\u003e\n            \u003cMenuItem Header=\"_View\"\u003e\n                \u003cMenuItem Header=\"_Theme\" DataContext=\"{x:Static app:App.Selector}\" Items=\"{Binding Themes}\"\u003e\n                    \u003cMenuItem.Styles\u003e\n                        \u003cStyle Selector=\"MenuItem\"\u003e\n                            \u003cSetter Property=\"Header\" Value=\"{Binding Name}\"/\u003e\n                            \u003cSetter Property=\"Command\" Value=\"{Binding Selector.ApplyTheme}\"/\u003e\n                            \u003cSetter Property=\"CommandParameter\" Value=\"{Binding}\"/\u003e\n                            \u003cSetter Property=\"Icon\"\u003e\n                                \u003cTemplate\u003e\n                                    \u003cCheckBox\u003e\n                                        \u003cCheckBox.IsChecked\u003e\n                                            \u003cMultiBinding Mode=\"OneWay\" Converter=\"{StaticResource ObjectEqualityMultiConverter}\"\u003e\n                                                \u003cBinding Path=\"DataContext\" RelativeSource=\"{RelativeSource Self}\"/\u003e\n                                                \u003cBinding Path=\"Selector.SelectedTheme\"/\u003e\n                                            \u003c/MultiBinding\u003e\n                                        \u003c/CheckBox.IsChecked\u003e\n                                    \u003c/CheckBox\u003e\n                                \u003c/Template\u003e\n                            \u003c/Setter\u003e\n                        \u003c/Style\u003e\n                    \u003c/MenuItem.Styles\u003e\n                \u003c/MenuItem\u003e\n            \u003c/MenuItem\u003e\n        \u003c/Menu\u003e\n    \u003c/Grid\u003e\n\u003c/Window\u003e\n```\n\n`MainWindow.xaml.xs`\n```C#\nusing Avalonia;\nusing Avalonia.Controls;\nusing Avalonia.Markup.Xaml;\nusing Avalonia.ThemeManager;\n\nnamespace AvaloniaApp\n{\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            this.InitializeComponent();\n            this.AttachDevTools();\n            App.Selector.EnableThemes(this);\n        }\n\n        private void InitializeComponent()\n        {\n            AvaloniaXamlLoader.Load(this);\n        }\n    }\n}\n```\n\nThe `EnableThemes(...);` can be used to enable themes for multiple windows.\n\n## NuGet\n\nAvalonia theme manager is delivered as a NuGet package.\n\nYou can find the packages here [NuGet](https://www.nuget.org/packages/Avalonia.ThemeManager/) and install the package like this:\n\n`Install-Package Avalonia.ThemeManager`\n\nor by using nightly build feed:\n* Add `https://www.myget.org/F/avaloniathememanager-nightly/api/v2` to your package sources\n* Alternative nightly build feed `https://pkgs.dev.azure.com/wieslawsoltes/GitHub/_packaging/Nightly/nuget/v3/index.json`\n* Update your package using `Avalonia.ThemeManager` feed\n\nand install the package like this:\n\n`Install-Package Avalonia.ThemeManager -Pre`\n\n## License\n\nAvalonia.ThemeManager is licensed under the [MIT license](LICENSE.TXT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwieslawsoltes%2Favalonia.thememanager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwieslawsoltes%2Favalonia.thememanager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwieslawsoltes%2Favalonia.thememanager/lists"}