{"id":16628968,"url":"https://github.com/bobbyesp/settingsui","last_synced_at":"2026-03-18T21:03:24.162Z","repository":{"id":138855794,"uuid":"438748469","full_name":"BobbyESP/SettingsUI","owner":"BobbyESP","description":"Windows 11 settings page in WinUI 3 applications ported from Powertoys","archived":false,"fork":false,"pushed_at":"2024-03-09T19:24:47.000Z","size":1199,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-18T05:14:14.436Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"WinUICommunity/SettingsUI","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BobbyESP.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","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":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":["https://link.trustwallet.com/send?coin=0\u0026address=bc1qzs4kt4aeqym6gsde669g5rksv4swjhzjqqp23a","https://link.trustwallet.com/send?coin=60\u0026address=0x40Db4476c1D498b167f76A2c7ED9D45b65eb5d0C"]}},"created_at":"2021-12-15T19:27:27.000Z","updated_at":"2024-09-12T10:06:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"7460ee39-c68c-41ba-9d44-f217a5ce0cd0","html_url":"https://github.com/BobbyESP/SettingsUI","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BobbyESP%2FSettingsUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BobbyESP%2FSettingsUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BobbyESP%2FSettingsUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BobbyESP%2FSettingsUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BobbyESP","download_url":"https://codeload.github.com/BobbyESP/SettingsUI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243075641,"owners_count":20232425,"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":[],"created_at":"2024-10-12T04:38:28.601Z","updated_at":"2026-03-18T21:03:24.115Z","avatar_url":"https://github.com/BobbyESP.png","language":"C#","funding_links":["https://link.trustwallet.com/send?coin=0\u0026address=bc1qzs4kt4aeqym6gsde669g5rksv4swjhzjqqp23a","https://link.trustwallet.com/send?coin=60\u0026address=0x40Db4476c1D498b167f76A2c7ED9D45b65eb5d0C"],"categories":[],"sub_categories":[],"readme":"# SettingsUI\n \nSettingsUI Helps you create your own application settings page, like Windows 11 Settings\n\n\u003e **_NOTE:_** SettingsUI is based on WindowsAppSDK 1.0.0\n\n## Install\n```\nInstall-Package SettingsUI\n```\n\nAfter installing, add the following resource to app.xaml\n\n```\n\u003cResourceDictionary Source=\"ms-appx:///SettingsUI/Themes/SettingsUI.xaml\"/\u003e\n```\n\nSee the Demo app to see how to use it\n\n![SettingsUI](https://raw.githubusercontent.com/ghost1372/Resources/main/SettingsUI/0.png)\n\n![SettingsUI](https://raw.githubusercontent.com/ghost1372/Resources/main/SettingsUI/1.png)\n\n![SettingsUI](https://raw.githubusercontent.com/ghost1372/Resources/main/SettingsUI/2.png)\n\n![SettingsUI](https://raw.githubusercontent.com/ghost1372/Resources/main/SettingsUI/3.png)\n\n![SettingsUI](https://raw.githubusercontent.com/ghost1372/Resources/main/SettingsUI/4.png)\n\n![SettingsUI](https://raw.githubusercontent.com/ghost1372/Resources/main/SettingsUI/5.png)\n\n![SettingsUI](https://raw.githubusercontent.com/ghost1372/Resources/main/SettingsUI/6.png)\n\n![SettingsUI](https://raw.githubusercontent.com/ghost1372/Resources/main/SettingsUI/7.png)\n\n## Helpers\nThere are also a number of helpers and extensions\n\n\n### ContentDialogExtension\n\nBy default, only 1 ContentDialog can be opened, with the help of this extension you can open multiple ContentDialogs.\n\n```\nContentDialog dialog = new ContentDialog()\n{\n    Title = \"Title\",\n    Content = \"Content\",\n    PrimaryButtonText = \"OK\",\n    CloseButtonText = \"Cancel\",\n    DefaultButton = ContentDialogButton.Primary,\n    XamlRoot = xamlRoot\n};\nvar result = await dialog.ShowAsyncQueue();\n```\n\n### Observable\n\ninherited from `INotifyPropertyChanged`\n\n```\npublic class ShellViewModel : Observable\n{\n    private bool isBackEnabled;\n    public bool IsBackEnabled\n    {\n        get { return isBackEnabled; }\n        set { Set(ref isBackEnabled, value); }\n    }\n}\n```\n\n### RelayCommand\n\ninherited from `ICommand`\n\n```\nprivate ICommand itemInvokedCommand;\n\npublic ICommand ItemInvokedCommand =\u003e itemInvokedCommand ?? (itemInvokedCommand = new RelayCommand\u003cstring\u003e(OnItemInvoked));\n\npublic void OnItemInvoked(string arg)\n{\n\n}\n```\n\n### AutoSuggestBoxHelper\n\nSimple helper for Loading suggestions list in `AutoSuggestBox`\n\n```\nprivate void AutoSuggest_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)\n{\n    AutoSuggestBoxHelper.LoadSuggestions(sender, args, mylist);\n}\n```\n\n### NavHelper and ShellViewModel\n\nEasily implement a `NavigationView` with Back button and AutoSuggestBox\n\n```\n\u003cNavigationView\n    x:Name=\"navigationView\"\n    IsBackEnabled=\"{x:Bind ViewModel.IsBackEnabled, Mode=OneWay}\"\n    ItemInvoked=\"navigationView_ItemInvoked\"\n    SelectedItem=\"{x:Bind ViewModel.Selected, Mode=OneWay}\"\u003e\n    \u003cNavigationView.AutoSuggestBox\u003e\n        \u003cAutoSuggestBox Name=\"autoSuggestBox\" QueryIcon=\"Find\" PlaceholderText=\"Search\" TextChanged=\"OnControlsSearchBoxTextChanged\" QuerySubmitted=\"OnControlsSearchBoxQuerySubmitted\"/\u003e\n    \u003c/NavigationView.AutoSuggestBox\u003e\n    \u003cNavigationView.MenuItems\u003e\n        \u003cNavigationViewItem\n            Margin=\"0,0,12,0\"\n            helpers:NavHelper.NavigateTo=\"views:GeneralPage\"\n            Content=\"General\"/\u003e\n\n        \u003cNavigationViewItem\n            Margin=\"0,0,12,0\"\n            helpers:NavHelper.NavigateTo=\"views:AwakePage\"\n            Content=\"General\"/\u003e\n\n        \u003cNavigationViewItem\n            Margin=\"0,0,12,0\"\n            helpers:NavHelper.NavigateTo=\"views:FancyZonesPage\"\n            Content=\"General\"/\u003e\n    \u003c/NavigationView.MenuItems\u003e\n    \u003cFrame x:Name=\"shellFrame\"/\u003e\n\u003c/NavigationView\u003e\n```\nnow create a new `ShellViewModel` and initialize it\n\n```\npublic ShellViewModel ViewModel { get; } = new ShellViewModel();\n\nViewModel.InitializeNavigation(shellFrame, navigationView)\n                    .WithAutoSuggestBox(autoSuggestBox)\n                    .WithKeyboardAccelerator(KeyboardAccelerators)\n                    .WithDefaultPage(typeof(myPage))\n                    .WithSettingsPage(typeof(mySettingsPage));\n```\n\nadd UserControl or Page `Loaded` event\n\n```\nprivate void UserControl_Loaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)\n{\n    ViewModel.OnLoaded();\n}\n\nprivate void navigationView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)\n{\n    ViewModel.OnItemInvoked(args);\n}\n\nprivate void OnControlsSearchBoxQuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)\n{\n    ViewModel.OnAutoSuggestBoxQuerySubmitted(args);\n}\n\nprivate void OnControlsSearchBoxTextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)\n{\n    ViewModel.OnAutoSuggestBoxTextChanged(args);\n}\n```\n\nif you have `Microsoft.Xaml.Behaviors.WinUI.Managed` nuget package, you can bind `Loaded` and `ItemInvoked` events to command\n\n```\n\u003cUserControl\u003e\n    \u003ci:Interaction.Behaviors\u003e\n        \u003cic:EventTriggerBehavior EventName=\"Loaded\"\u003e\n            \u003cic:InvokeCommandAction Command=\"{x:Bind ViewModel.LoadedCommand}\"/\u003e\n        \u003c/ic:EventTriggerBehavior\u003e\n    \u003c/i:Interaction.Behaviors\u003e\n\n\u003cNavigationView\u003e\n    \u003ci:Interaction.Behaviors\u003e\n        \u003cic:EventTriggerBehavior EventName=\"ItemInvoked\"\u003e\n            \u003cic:InvokeCommandAction Command=\"{x:Bind ViewModel.ItemInvokedCommand}\"/\u003e\n        \u003c/ic:EventTriggerBehavior\u003e\n    \u003c/i:Interaction.Behaviors\u003e\n\u003c/NavigationView\u003e\n\n\u003cAutoSuggestBox\u003e\n    \u003ci:Interaction.Behaviors\u003e\n        \u003cic:EventTriggerBehavior EventName=\"TextChanged\"\u003e\n            \u003cic:InvokeCommandAction Command=\"{x:Bind ViewModel.AutoSuggestBoxTextChangedCommand}\"/\u003e\n        \u003c/ic:EventTriggerBehavior\u003e\n        \u003cic:EventTriggerBehavior EventName=\"QuerySubmitted\"\u003e\n            \u003cic:InvokeCommandAction Command=\"{x:Bind ViewModel.AutoSuggestBoxQuerySubmittedCommand}\"/\u003e\n        \u003c/ic:EventTriggerBehavior\u003e\n    \u003c/i:Interaction.Behaviors\u003e\n\u003c/NavigationView\u003e\n\u003c/UserControl\u003e\n```\n\n### UpdateHelper\n\nyou can use UpdateHelper for checking application updates from github release page\n\nfirst you must create a new release tag in github repository, tag version must be in this format : `1.0.0.0`\nnow we can check for update with github username and github repository\n\n```\nvar ver = await UpdateHelper.CheckUpdateAsync(\"ghost1372\", \"SettingsUI\");\nif(ver.IsExistNewVersion)\n{\n    Debug.WriteLine(ver.ReleaseUrl);\n    Debug.WriteLine(ver.CreatedAt.ToString());\n    Debug.WriteLine(ver.PublishedAt.ToString());\n    \n    //Asset is List so maybe there is more than one file you can use forech or increase index\n    Debug.WriteLine(ver.Assets[0].Url);\n    Debug.WriteLine(ver.IsPreRelease.ToString());\n    Debug.WriteLine(ver.Assets[0].Size.ToString());\n    Debug.WriteLine(ver.Version);\n    Debug.WriteLine(ver.Changelog);\n}\n```\n\n### GeneralHelper\n\n#### EnableSound\nenable sound for controls\n\n```\nGeneralHelper.EnableSound();\n```\n\n#### GetEnum\nget enum from string\n\n```\nvar myenum = GeneralHelper.GetEnum\u003cElementTheme\u003e(\"Dark\");\n```\n\n#### IsNetworkAvailable\n\nCheck if the internet is connected or not\n\n```\nGeneralHelper.IsNetworkAvailable();\n```\n\n#### GetGeometry\n\n```\n\u003cx:String x:Key=\"FavoriteGeometry\"\u003eM16.4996 5.2021C16.4996 2.76017 15.3595 1.00342 13.4932 1.00342C12.467 1.00342 12.1149 1.60478 11.747 3.00299C11.6719 3.29184 11.635 3.43248 11.596 3.57109C11.495 3.92982 11.3192 4.54058 11.069 5.4021C11.0623 5.42518 11.0524 5.44692 11.0396 5.467L8.17281 9.95266C7.49476 11.0136 6.49429 11.8291 5.31841 12.2793L4.84513 12.4605C3.5984 12.9379 2.87457 14.2416 3.1287 15.5522L3.53319 17.6383C3.77462 18.8834 4.71828 19.8743 5.9501 20.1762L13.5778 22.0457C16.109 22.6661 18.6674 21.1312 19.3113 18.6059L20.7262 13.0567C21.1697 11.3174 20.1192 9.54796 18.3799 9.10449C18.1175 9.03758 17.8478 9.00373 17.5769 9.00373H15.7536C16.2497 7.37084 16.4996 6.11106 16.4996 5.2021ZM4.60127 15.2667C4.48576 14.671 4.81477 14.0783 5.38147 13.8614L5.85475 13.6802C7.33036 13.1152 8.58585 12.0918 9.43674 10.7604L12.3035 6.27477C12.3935 6.13388 12.4629 5.98082 12.5095 5.82026C12.7608 4.95525 12.9375 4.34126 13.0399 3.97737C13.083 3.82412 13.1239 3.66867 13.1976 3.3847C13.3875 2.663 13.4809 2.50342 13.4932 2.50342C14.3609 2.50342 14.9996 3.48749 14.9996 5.2021C14.9996 6.08659 14.6738 7.53754 14.0158 9.51717C13.8544 10.0027 14.2158 10.5037 14.7275 10.5037H17.5769C17.7228 10.5037 17.868 10.522 18.0093 10.558C18.9459 10.7968 19.5115 11.7496 19.2727 12.6861L17.8578 18.2353C17.4172 19.9631 15.6668 21.0133 13.9349 20.5889L6.30718 18.7193C5.64389 18.5568 5.13577 18.0232 5.00577 17.3528L4.60127 15.2667Z\u003c/x:String\u003e\n\nvar myGeometry = GeneralHelper.GetGeometry(\"FavoriteGeometry\");\n\nIcon = new PathIcon { Data = myGeometry },\n```\n\n#### GetColorFromHex\n\n```\nvar color = Application.Current.Resources[\"SystemAccentColor\"];\nvar accent = Helper.GetColorFromHex(color.ToString());\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobbyesp%2Fsettingsui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbobbyesp%2Fsettingsui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbobbyesp%2Fsettingsui/lists"}