Repository: lepoco/wpfui Branch: main Commit: e6e22e338987 Files: 1065 Total size: 15.7 MB Directory structure: gitextract_lxt73sm_/ ├── .config/ │ └── dotnet-tools.json ├── .csharpierignore ├── .csharpierrc ├── .devcontainer/ │ ├── devcontainer.json │ └── post-create.sh ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yaml │ │ ├── config.yml │ │ └── feature_request.yaml │ ├── chatmodes/ │ │ └── documentation_contributor.chatmode.md │ ├── copilot-instructions.md │ ├── dependabot.yml │ ├── labeler.yml │ ├── labels.yml │ ├── policies/ │ │ ├── cla.yml │ │ └── platformcontext.yml │ ├── pull_request_template.md │ └── workflows/ │ ├── top-issues-dashboard.yml │ ├── wpf-ui-cd-docs.yaml │ ├── wpf-ui-cd-extension.yaml │ ├── wpf-ui-cd-nuget.yaml │ ├── wpf-ui-labeler.yml │ ├── wpf-ui-lock.yml │ └── wpf-ui-pr-validator.yaml ├── .gitignore ├── .vsconfig ├── CNAME ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Directory.Build.props ├── Directory.Build.targets ├── Directory.Packages.props ├── LICENSE ├── LICENSE.md ├── README.md ├── SECURITY.md ├── Settings.XamlStyler ├── ThirdPartyNotices.txt ├── Wpf.Ui.Gallery.slnf ├── Wpf.Ui.Library.slnf ├── Wpf.Ui.sln ├── branding/ │ ├── geometric_splash.psd │ ├── microsoft-fluent-resources.psd │ └── wpfui.psd ├── build.cmd ├── build.ps1 ├── docs/ │ ├── .gitignore │ ├── codesnippet/ │ │ └── Rtf/ │ │ ├── Hyperlink/ │ │ │ └── RtfDocumentProcessor.cs │ │ ├── RtfBuildStep.cs │ │ └── RtfDocumentProcessor.cs │ ├── docfx.json │ ├── documentation/ │ │ ├── .gitignore │ │ ├── about-wpf.md │ │ ├── accent.md │ │ ├── extension.md │ │ ├── fonticon.md │ │ ├── gallery-editor.md │ │ ├── gallery-monaco-editor.md │ │ ├── gallery.md │ │ ├── getting-started.md │ │ ├── icons.md │ │ ├── index.md │ │ ├── menu.md │ │ ├── navigation-view.md │ │ ├── nuget.md │ │ ├── releases.md │ │ ├── symbolicon.md │ │ ├── system-theme-watcher.md │ │ └── themes.md │ ├── index.md │ ├── manifest.webmanifest │ ├── migration/ │ │ ├── v2-migration.md │ │ ├── v3-migration.md │ │ └── v4-migration.md │ ├── robots.txt │ ├── templates/ │ │ ├── .eslintrc.js │ │ ├── .gitignore │ │ ├── .stylelintrc.json │ │ ├── README.md │ │ ├── build.js │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── wpfui/ │ │ ├── layout/ │ │ │ └── _master.tmpl │ │ ├── partials/ │ │ │ ├── class.header.tmpl.partial │ │ │ ├── class.memberpage.tmpl.partial │ │ │ ├── class.tmpl.partial │ │ │ ├── collection.tmpl.partial │ │ │ ├── customMREFContent.tmpl.partial │ │ │ ├── enum.tmpl.partial │ │ │ ├── item.tmpl.partial │ │ │ └── namespace.tmpl.partial │ │ ├── src/ │ │ │ ├── docfx.scss │ │ │ ├── docfx.ts │ │ │ ├── dotnet.scss │ │ │ ├── helper.test.ts │ │ │ ├── helper.ts │ │ │ ├── highlight.scss │ │ │ ├── highlight.ts │ │ │ ├── layout.scss │ │ │ ├── markdown.scss │ │ │ ├── markdown.ts │ │ │ ├── mixins.scss │ │ │ ├── nav.scss │ │ │ ├── nav.ts │ │ │ ├── options.d.ts │ │ │ ├── search-worker.ts │ │ │ ├── search.scss │ │ │ ├── search.ts │ │ │ ├── theme.ts │ │ │ ├── toc.scss │ │ │ ├── toc.ts │ │ │ ├── wpfui-index-stats.ts │ │ │ └── wpfui.scss │ │ ├── toc.json.js │ │ └── toc.json.tmpl │ └── toc.yml ├── nuget.config ├── samples/ │ ├── Wpf.Ui.Demo.Console/ │ │ ├── GlobalUsings.cs │ │ ├── Models/ │ │ │ └── DataColor.cs │ │ ├── Program.cs │ │ ├── Utilities/ │ │ │ └── ThemeUtilities.cs │ │ ├── Views/ │ │ │ ├── MainView.xaml │ │ │ ├── MainView.xaml.cs │ │ │ ├── Pages/ │ │ │ │ ├── DashboardPage.xaml │ │ │ │ ├── DashboardPage.xaml.cs │ │ │ │ ├── DataPage.xaml │ │ │ │ ├── DataPage.xaml.cs │ │ │ │ ├── SettingsPage.xaml │ │ │ │ └── SettingsPage.xaml.cs │ │ │ ├── SimpleView.xaml │ │ │ └── SimpleView.xaml.cs │ │ └── Wpf.Ui.Demo.Console.csproj │ ├── Wpf.Ui.Demo.Dialogs/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AssemblyInfo.cs │ │ ├── MainWindow.xaml │ │ ├── MainWindow.xaml.cs │ │ ├── Wpf.Ui.Demo.Dialogs.csproj │ │ └── app.manifest │ ├── Wpf.Ui.Demo.Mvvm/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AssemblyInfo.cs │ │ ├── GlobalUsings.cs │ │ ├── Helpers/ │ │ │ └── EnumToBooleanConverter.cs │ │ ├── Models/ │ │ │ ├── AppConfig.cs │ │ │ └── DataColor.cs │ │ ├── Services/ │ │ │ └── ApplicationHostService.cs │ │ ├── ViewModels/ │ │ │ ├── DashboardViewModel.cs │ │ │ ├── DataViewModel.cs │ │ │ ├── MainWindowViewModel.cs │ │ │ ├── SettingsViewModel.cs │ │ │ └── ViewModel.cs │ │ ├── Views/ │ │ │ ├── MainWindow.xaml │ │ │ ├── MainWindow.xaml.cs │ │ │ └── Pages/ │ │ │ ├── DashboardPage.xaml │ │ │ ├── DashboardPage.xaml.cs │ │ │ ├── DataPage.xaml │ │ │ ├── DataPage.xaml.cs │ │ │ ├── SettingsPage.xaml │ │ │ └── SettingsPage.xaml.cs │ │ ├── Wpf.Ui.Demo.Mvvm.csproj │ │ └── app.manifest │ ├── Wpf.Ui.Demo.SetResources.Simple/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AssemblyInfo.cs │ │ ├── MainWindow.xaml │ │ ├── MainWindow.xaml.cs │ │ ├── Models/ │ │ │ ├── DataColor.cs │ │ │ └── DataGroup.cs │ │ ├── Views/ │ │ │ └── Pages/ │ │ │ ├── DashboardPage.xaml │ │ │ ├── DashboardPage.xaml.cs │ │ │ ├── DataPage.xaml │ │ │ ├── DataPage.xaml.cs │ │ │ ├── ExpanderPage.xaml │ │ │ ├── ExpanderPage.xaml.cs │ │ │ ├── SettingsPage.xaml │ │ │ └── SettingsPage.xaml.cs │ │ ├── Wpf.Ui.Demo.SetResources.Simple.csproj │ │ └── app.manifest │ └── Wpf.Ui.Demo.Simple/ │ ├── App.xaml │ ├── App.xaml.cs │ ├── AssemblyInfo.cs │ ├── MainWindow.xaml │ ├── MainWindow.xaml.cs │ ├── Models/ │ │ └── DataColor.cs │ ├── Views/ │ │ └── Pages/ │ │ ├── DashboardPage.xaml │ │ ├── DashboardPage.xaml.cs │ │ ├── DataPage.xaml │ │ ├── DataPage.xaml.cs │ │ ├── SettingsPage.xaml │ │ └── SettingsPage.xaml.cs │ ├── Wpf.Ui.Demo.Simple.csproj │ └── app.manifest ├── src/ │ ├── Wpf.Ui/ │ │ ├── Animations/ │ │ │ ├── AnimationProperties.cs │ │ │ ├── Transition.cs │ │ │ └── TransitionAnimationProvider.cs │ │ ├── Appearance/ │ │ │ ├── ApplicationAccentColorManager.cs │ │ │ ├── ApplicationTheme.cs │ │ │ ├── ApplicationThemeManager.cs │ │ │ ├── ObservedWindow.cs │ │ │ ├── ResourceDictionaryManager.cs │ │ │ ├── SystemTheme.cs │ │ │ ├── SystemThemeManager.cs │ │ │ ├── SystemThemeWatcher.cs │ │ │ ├── ThemeChangedEvent.cs │ │ │ ├── UISettingsRCW.cs │ │ │ └── WindowBackgroundManager.cs │ │ ├── AutomationPeers/ │ │ │ ├── CardControlAutomationPeer.cs │ │ │ └── ContentDialogAutomationPeer.cs │ │ ├── ContentDialogService.cs │ │ ├── Controls/ │ │ │ ├── AccessText/ │ │ │ │ └── AccessText.xaml │ │ │ ├── Anchor/ │ │ │ │ ├── Anchor.cs │ │ │ │ └── Anchor.xaml │ │ │ ├── Arc/ │ │ │ │ └── Arc.cs │ │ │ ├── AutoSuggestBox/ │ │ │ │ ├── AutoSuggestBox.cs │ │ │ │ ├── AutoSuggestBox.xaml │ │ │ │ ├── AutoSuggestBoxQuerySubmittedEventArgs.cs │ │ │ │ ├── AutoSuggestBoxSuggestionChosenEventArgs.cs │ │ │ │ ├── AutoSuggestBoxTextChangedEventArgs.cs │ │ │ │ └── AutoSuggestionBoxTextChangeReason.cs │ │ │ ├── Badge/ │ │ │ │ ├── Badge.cs │ │ │ │ └── Badge.xaml │ │ │ ├── BreadcrumbBar/ │ │ │ │ ├── BreadcrumbBar.cs │ │ │ │ ├── BreadcrumbBar.xaml │ │ │ │ ├── BreadcrumbBarItem.cs │ │ │ │ └── BreadcrumbBarItemClickedEventArgs.cs │ │ │ ├── Button/ │ │ │ │ ├── Button.cs │ │ │ │ └── Button.xaml │ │ │ ├── Calendar/ │ │ │ │ └── Calendar.xaml │ │ │ ├── CalendarDatePicker/ │ │ │ │ ├── CalendarDatePicker.cs │ │ │ │ └── CalendarDatePicker.xaml │ │ │ ├── Card/ │ │ │ │ ├── Card.cs │ │ │ │ └── Card.xaml │ │ │ ├── CardAction/ │ │ │ │ ├── CardAction.cs │ │ │ │ ├── CardAction.xaml │ │ │ │ └── CardActionAutomationPeer.cs │ │ │ ├── CardColor/ │ │ │ │ ├── CardColor.cs │ │ │ │ └── CardColor.xaml │ │ │ ├── CardControl/ │ │ │ │ ├── CardControl.cs │ │ │ │ └── CardControl.xaml │ │ │ ├── CardExpander/ │ │ │ │ ├── CardExpander.cs │ │ │ │ └── CardExpander.xaml │ │ │ ├── CheckBox/ │ │ │ │ └── CheckBox.xaml │ │ │ ├── ClientAreaBorder/ │ │ │ │ └── ClientAreaBorder.cs │ │ │ ├── ColorPicker/ │ │ │ │ ├── ColorPicker.cs │ │ │ │ └── ColorPicker.xaml │ │ │ ├── ComboBox/ │ │ │ │ └── ComboBox.xaml │ │ │ ├── ContentDialog/ │ │ │ │ ├── ContentDialog.FocusBehavior.cs │ │ │ │ ├── ContentDialog.cs │ │ │ │ ├── ContentDialog.xaml │ │ │ │ ├── ContentDialogButton.cs │ │ │ │ ├── ContentDialogHost.cs │ │ │ │ ├── ContentDialogHost.xaml │ │ │ │ ├── ContentDialogHostBehavior.cs │ │ │ │ ├── ContentDialogHostController.cs │ │ │ │ ├── ContentDialogResult.cs │ │ │ │ └── EventArgs/ │ │ │ │ ├── ContentDialogButtonClickEventArgs.cs │ │ │ │ ├── ContentDialogClosedEventArgs.cs │ │ │ │ └── ContentDialogClosingEventArgs.cs │ │ │ ├── ContextMenu/ │ │ │ │ ├── ContextMenu.xaml │ │ │ │ ├── ContextMenuLoader.xaml │ │ │ │ └── ContextMenuLoader.xaml.cs │ │ │ ├── ControlAppearance.cs │ │ │ ├── ControlsServices.cs │ │ │ ├── DataGrid/ │ │ │ │ ├── DataGrid.cs │ │ │ │ └── DataGrid.xaml │ │ │ ├── DatePicker/ │ │ │ │ └── DatePicker.xaml │ │ │ ├── DateTimeHelper.cs │ │ │ ├── DropDownButton/ │ │ │ │ ├── DropDownButton.cs │ │ │ │ └── DropDownButton.xaml │ │ │ ├── DynamicScrollBar/ │ │ │ │ ├── DynamicScrollBar.cs │ │ │ │ └── DynamicScrollBar.xaml │ │ │ ├── DynamicScrollViewer/ │ │ │ │ ├── DynamicScrollViewer.cs │ │ │ │ └── DynamicScrollViewer.xaml │ │ │ ├── EffectThicknessDecorator.cs │ │ │ ├── ElementPlacement.cs │ │ │ ├── EventIdentifier.cs │ │ │ ├── Expander/ │ │ │ │ └── Expander.xaml │ │ │ ├── FluentWindow/ │ │ │ │ ├── FluentWindow.cs │ │ │ │ └── FluentWindow.xaml │ │ │ ├── Flyout/ │ │ │ │ ├── Flyout.cs │ │ │ │ └── Flyout.xaml │ │ │ ├── FontTypography.cs │ │ │ ├── Frame/ │ │ │ │ └── Frame.xaml │ │ │ ├── GridView/ │ │ │ │ ├── GridView.cs │ │ │ │ ├── GridViewColumn.cs │ │ │ │ ├── GridViewColumnHeader.xaml │ │ │ │ ├── GridViewHeaderRowIndicator.xaml │ │ │ │ ├── GridViewHeaderRowPresenter.cs │ │ │ │ └── GridViewRowPresenter.cs │ │ │ ├── HyperlinkButton/ │ │ │ │ ├── HyperlinkButton.cs │ │ │ │ └── HyperlinkButton.xaml │ │ │ ├── IAppearanceControl.cs │ │ │ ├── IDpiAwareControl.cs │ │ │ ├── IIconControl.cs │ │ │ ├── IThemeControl.cs │ │ │ ├── IconElement/ │ │ │ │ ├── FontIcon.cs │ │ │ │ ├── IconElement.cs │ │ │ │ ├── IconElementConverter.cs │ │ │ │ ├── IconSourceElement.cs │ │ │ │ ├── ImageIcon.cs │ │ │ │ └── SymbolIcon.cs │ │ │ ├── IconSource/ │ │ │ │ ├── FontIconSource.cs │ │ │ │ ├── IconSource.cs │ │ │ │ └── SymbolIconSource.cs │ │ │ ├── Image/ │ │ │ │ ├── Image.cs │ │ │ │ └── Image.xaml │ │ │ ├── InfoBadge/ │ │ │ │ ├── InfoBadge.cs │ │ │ │ ├── InfoBadge.xaml │ │ │ │ └── InfoBadgeSeverity.cs │ │ │ ├── InfoBar/ │ │ │ │ ├── InfoBar.cs │ │ │ │ ├── InfoBar.xaml │ │ │ │ └── InfoBarSeverity.cs │ │ │ ├── ItemRange.cs │ │ │ ├── ItemsControl/ │ │ │ │ └── ItemsControl.xaml │ │ │ ├── Label/ │ │ │ │ └── Label.xaml │ │ │ ├── ListBox/ │ │ │ │ ├── ListBox.xaml │ │ │ │ └── ListBoxItem.xaml │ │ │ ├── ListView/ │ │ │ │ ├── ListView.cs │ │ │ │ ├── ListView.xaml │ │ │ │ ├── ListViewItem.cs │ │ │ │ ├── ListViewItem.xaml │ │ │ │ └── ListViewViewState.cs │ │ │ ├── LoadingScreen/ │ │ │ │ ├── LoadingScreen.cs │ │ │ │ └── LoadingScreen.xaml │ │ │ ├── Menu/ │ │ │ │ ├── Menu.xaml │ │ │ │ ├── MenuItem.cs │ │ │ │ ├── MenuItem.xaml │ │ │ │ ├── MenuLoader.xaml │ │ │ │ └── MenuLoader.xaml.cs │ │ │ ├── MessageBox/ │ │ │ │ ├── MessageBox.cs │ │ │ │ ├── MessageBox.xaml │ │ │ │ ├── MessageBoxButton.cs │ │ │ │ └── MessageBoxResult.cs │ │ │ ├── NavigationView/ │ │ │ │ ├── INavigationView.cs │ │ │ │ ├── INavigationViewItem.cs │ │ │ │ ├── NavigatedEventArgs.cs │ │ │ │ ├── NavigatingCancelEventArgs.cs │ │ │ │ ├── NavigationCache.cs │ │ │ │ ├── NavigationCacheMode.cs │ │ │ │ ├── NavigationLeftFluent.xaml │ │ │ │ ├── NavigationView.AttachedProperties.cs │ │ │ │ ├── NavigationView.Base.cs │ │ │ │ ├── NavigationView.Events.cs │ │ │ │ ├── NavigationView.Navigation.cs │ │ │ │ ├── NavigationView.Properties.cs │ │ │ │ ├── NavigationView.TemplateParts.cs │ │ │ │ ├── NavigationView.xaml │ │ │ │ ├── NavigationViewActivator.cs │ │ │ │ ├── NavigationViewBackButtonVisible.cs │ │ │ │ ├── NavigationViewBasePaneButtonStyle.xaml │ │ │ │ ├── NavigationViewBottom.xaml │ │ │ │ ├── NavigationViewBreadcrumbItem.cs │ │ │ │ ├── NavigationViewBreadcrumbItem.xaml │ │ │ │ ├── NavigationViewCompact.xaml │ │ │ │ ├── NavigationViewConstants.xaml │ │ │ │ ├── NavigationViewContentPresenter.cs │ │ │ │ ├── NavigationViewContentPresenter.xaml │ │ │ │ ├── NavigationViewItem.cs │ │ │ │ ├── NavigationViewItemAutomationPeer.cs │ │ │ │ ├── NavigationViewItemDefaultStyle.xaml │ │ │ │ ├── NavigationViewItemHeader.cs │ │ │ │ ├── NavigationViewItemHeader.xaml │ │ │ │ ├── NavigationViewItemSeparator.cs │ │ │ │ ├── NavigationViewItemSeparator.xaml │ │ │ │ ├── NavigationViewLeftMinimalCompact.xaml │ │ │ │ ├── NavigationViewPaneDisplayMode.cs │ │ │ │ └── NavigationViewTop.xaml │ │ │ ├── NumberBox/ │ │ │ │ ├── INumberFormatter.cs │ │ │ │ ├── INumberParser.cs │ │ │ │ ├── NumberBox.cs │ │ │ │ ├── NumberBox.xaml │ │ │ │ ├── NumberBoxSpinButtonPlacementMode.cs │ │ │ │ ├── NumberBoxValidationMode.cs │ │ │ │ ├── NumberBoxValueChangedEventArgs.cs │ │ │ │ └── ValidateNumberFormatter.cs │ │ │ ├── Page/ │ │ │ │ └── Page.xaml │ │ │ ├── PassiveScrollViewer.cs │ │ │ ├── PasswordBox/ │ │ │ │ ├── PasswordBox.cs │ │ │ │ ├── PasswordBox.xaml │ │ │ │ └── PasswordHelper.cs │ │ │ ├── ProgressBar/ │ │ │ │ └── ProgressBar.xaml │ │ │ ├── ProgressRing/ │ │ │ │ ├── ProgressRing.cs │ │ │ │ └── ProgressRing.xaml │ │ │ ├── RadioButton/ │ │ │ │ └── RadioButton.xaml │ │ │ ├── RatingControl/ │ │ │ │ ├── RatingControl.cs │ │ │ │ └── RatingControl.xaml │ │ │ ├── RichTextBox/ │ │ │ │ ├── RichTextBox.cs │ │ │ │ └── RichTextBox.xaml │ │ │ ├── ScrollBar/ │ │ │ │ └── ScrollBar.xaml │ │ │ ├── ScrollDirection.cs │ │ │ ├── ScrollViewer/ │ │ │ │ └── ScrollViewer.xaml │ │ │ ├── Separator/ │ │ │ │ └── Separator.xaml │ │ │ ├── Slider/ │ │ │ │ └── Slider.xaml │ │ │ ├── Snackbar/ │ │ │ │ ├── Snackbar.cs │ │ │ │ ├── Snackbar.xaml │ │ │ │ └── SnackbarPresenter.cs │ │ │ ├── SpacingMode.cs │ │ │ ├── SplitButton/ │ │ │ │ ├── SplitButton.cs │ │ │ │ └── SplitButton.xaml │ │ │ ├── StatusBar/ │ │ │ │ └── StatusBar.xaml │ │ │ ├── SymbolFilled.cs │ │ │ ├── SymbolGlyph.cs │ │ │ ├── SymbolRegular.cs │ │ │ ├── TabControl/ │ │ │ │ └── TabControl.xaml │ │ │ ├── TabView/ │ │ │ │ ├── TabView.cs │ │ │ │ └── TabViewItem.cs │ │ │ ├── TextBlock/ │ │ │ │ ├── TextBlock.cs │ │ │ │ ├── TextBlock.xaml │ │ │ │ └── TextBlockMetadata.cs │ │ │ ├── TextBox/ │ │ │ │ ├── TextBox.cs │ │ │ │ └── TextBox.xaml │ │ │ ├── TextColor.cs │ │ │ ├── ThumbRate/ │ │ │ │ ├── ThumbRate.cs │ │ │ │ ├── ThumbRate.xaml │ │ │ │ └── ThumbRateState.cs │ │ │ ├── TimePicker/ │ │ │ │ ├── ClockIdentifier.cs │ │ │ │ ├── TimePicker.cs │ │ │ │ └── TimePicker.xaml │ │ │ ├── TitleBar/ │ │ │ │ ├── HwndProcEventArgs.cs │ │ │ │ ├── TitleBar.WindowResize.cs │ │ │ │ ├── TitleBar.cs │ │ │ │ ├── TitleBar.xaml │ │ │ │ ├── TitleBarButton.cs │ │ │ │ └── TitleBarButtonType.cs │ │ │ ├── ToggleButton/ │ │ │ │ └── ToggleButton.xaml │ │ │ ├── ToggleSwitch/ │ │ │ │ ├── ToggleSwitch.cs │ │ │ │ └── ToggleSwitch.xaml │ │ │ ├── ToolBar/ │ │ │ │ └── ToolBar.xaml │ │ │ ├── ToolTip/ │ │ │ │ └── ToolTip.xaml │ │ │ ├── TreeGrid/ │ │ │ │ ├── TreeGrid.cs │ │ │ │ ├── TreeGrid.xaml │ │ │ │ ├── TreeGridHeader.cs │ │ │ │ └── TreeGridItem.cs │ │ │ ├── TreeView/ │ │ │ │ ├── TreeView.xaml │ │ │ │ ├── TreeViewItem.cs │ │ │ │ └── TreeViewItem.xaml │ │ │ ├── TypedEventHandler.cs │ │ │ ├── VirtualizingGridView/ │ │ │ │ ├── VirtualizingGridView.cs │ │ │ │ └── VirtualizingGridView.xaml │ │ │ ├── VirtualizingItemsControl/ │ │ │ │ ├── VirtualizingItemsControl.cs │ │ │ │ └── VirtualizingItemsControl.xaml │ │ │ ├── VirtualizingUniformGrid/ │ │ │ │ └── VirtualizingUniformGrid.cs │ │ │ ├── VirtualizingWrapPanel/ │ │ │ │ ├── VirtualizingPanelBase.cs │ │ │ │ ├── VirtualizingWrapPanel.cs │ │ │ │ └── VirtualizingWrapPanel.xaml │ │ │ └── Window/ │ │ │ ├── Window.xaml │ │ │ ├── WindowBackdrop.cs │ │ │ ├── WindowBackdropType.cs │ │ │ └── WindowCornerPreference.cs │ │ ├── Converters/ │ │ │ ├── AnimationFactorToValueConverter.cs │ │ │ ├── BackButtonVisibilityToVisibilityConverter.cs │ │ │ ├── BoolToVisibilityConverter.cs │ │ │ ├── BrushToColorConverter.cs │ │ │ ├── ClipConverter.cs │ │ │ ├── ContentDialogButtonEnumToBoolConverter.cs │ │ │ ├── CornerRadiusSplitConverter.cs │ │ │ ├── DatePickerButtonPaddingConverter.cs │ │ │ ├── EnumToBoolConverter.cs │ │ │ ├── FallbackBrushConverter.cs │ │ │ ├── IconSourceElementConverter.cs │ │ │ ├── LeftSplitCornerRadiusConverter.cs │ │ │ ├── LeftSplitThicknessConverter.cs │ │ │ ├── NullToVisibilityConverter.cs │ │ │ ├── ProgressThicknessConverter.cs │ │ │ ├── RightSplitCornerRadiusConverter.cs │ │ │ ├── RightSplitThicknessConverter.cs │ │ │ └── TextToAsteriskConverter.cs │ │ ├── Designer/ │ │ │ └── DesignerHelper.cs │ │ ├── Extensions/ │ │ │ ├── ColorExtensions.cs │ │ │ ├── ContentDialogServiceExtensions.cs │ │ │ ├── ContextMenuExtensions.cs │ │ │ ├── DateTimeExtensions.cs │ │ │ ├── FrameExtensions.cs │ │ │ ├── NavigationServiceExtensions.cs │ │ │ ├── PInvokeExtensions.cs │ │ │ ├── SnackbarServiceExtensions.cs │ │ │ ├── StringExtensions.cs │ │ │ ├── SymbolExtensions.cs │ │ │ ├── TextBlockFontTypographyExtensions.cs │ │ │ ├── TextColorExtensions.cs │ │ │ ├── UiElementExtensions.cs │ │ │ └── UriExtensions.cs │ │ ├── GlobalUsings.cs │ │ ├── Hardware/ │ │ │ ├── DisplayDpi.cs │ │ │ ├── DpiHelper.cs │ │ │ ├── HardwareAcceleration.cs │ │ │ └── RenderingTier.cs │ │ ├── IContentDialogService.cs │ │ ├── INavigationService.cs │ │ ├── INavigationWindow.cs │ │ ├── ISnackbarService.cs │ │ ├── ITaskBarService.cs │ │ ├── IThemeService.cs │ │ ├── Input/ │ │ │ ├── IRelayCommand.cs │ │ │ ├── IRelayCommand{T}.cs │ │ │ └── RelayCommand{T}.cs │ │ ├── Interop/ │ │ │ ├── PInvoke.cs │ │ │ ├── UnsafeNativeMethods.cs │ │ │ └── UnsafeReflection.cs │ │ ├── Markup/ │ │ │ ├── ControlsDictionary.cs │ │ │ ├── Design.cs │ │ │ ├── FontIconExtension.cs │ │ │ ├── ImageIconExtension.cs │ │ │ ├── SymbolIconExtension.cs │ │ │ ├── ThemeResource.cs │ │ │ ├── ThemeResourceExtension.cs │ │ │ └── ThemesDictionary.cs │ │ ├── NativeMethods.txt │ │ ├── NavigationService.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Resources/ │ │ │ ├── Accent.xaml │ │ │ ├── DefaultContextMenu.xaml │ │ │ ├── DefaultFocusVisualStyle.xaml │ │ │ ├── DefaultTextBoxScrollViewerStyle.xaml │ │ │ ├── Fonts.xaml │ │ │ ├── Palette.xaml │ │ │ ├── StaticColors.xaml │ │ │ ├── Theme/ │ │ │ │ ├── Dark.xaml │ │ │ │ ├── HC1.xaml │ │ │ │ ├── HC2.xaml │ │ │ │ ├── HCBlack.xaml │ │ │ │ ├── HCWhite.xaml │ │ │ │ └── Light.xaml │ │ │ ├── Typography.xaml │ │ │ ├── Variables.xaml │ │ │ └── Wpf.Ui.xaml │ │ ├── SimpleContentDialogCreateOptions.cs │ │ ├── SnackbarService.cs │ │ ├── TaskBarService.cs │ │ ├── Taskbar/ │ │ │ ├── TaskbarProgress.cs │ │ │ └── TaskbarProgressState.cs │ │ ├── ThemeService.cs │ │ ├── UiApplication.cs │ │ ├── UiAssembly.cs │ │ ├── VisualStudioToolsManifest.xml │ │ ├── Win32/ │ │ │ └── Utilities.cs │ │ └── Wpf.Ui.csproj │ ├── Wpf.Ui.Abstractions/ │ │ ├── Controls/ │ │ │ ├── INavigableView.cs │ │ │ ├── INavigationAware.cs │ │ │ └── NavigationAware.cs │ │ ├── GlobalUsings.cs │ │ ├── INavigationViewPageProvider.cs │ │ ├── NavigationException.cs │ │ ├── NavigationViewPageProviderExtensions.cs │ │ └── Wpf.Ui.Abstractions.csproj │ ├── Wpf.Ui.DependencyInjection/ │ │ ├── DependencyInjectionNavigationViewPageProvider.cs │ │ ├── GlobalUsings.cs │ │ ├── ServiceCollectionExtensions.cs │ │ └── Wpf.Ui.DependencyInjection.csproj │ ├── Wpf.Ui.Extension/ │ │ ├── Wpf.Ui.Extension.csproj │ │ ├── license.txt │ │ └── source.extension.vsixmanifest │ ├── Wpf.Ui.Extension.Template.Blank/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AssemblyInfo.cs │ │ ├── Wpf.Ui.Blank.csproj │ │ ├── Wpf.Ui.Blank.vstemplate │ │ ├── Wpf.Ui.Extension.Template.Blank.csproj │ │ └── app.manifest │ ├── Wpf.Ui.Extension.Template.Compact/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AssemblyInfo.cs │ │ ├── Helpers/ │ │ │ └── EnumToBooleanConverter.cs │ │ ├── Models/ │ │ │ ├── AppConfig.cs │ │ │ └── DataColor.cs │ │ ├── Resources/ │ │ │ └── Translations.cs │ │ ├── Services/ │ │ │ └── ApplicationHostService.cs │ │ ├── Usings.cs │ │ ├── ViewModels/ │ │ │ ├── Pages/ │ │ │ │ ├── DashboardViewModel.cs │ │ │ │ ├── DataViewModel.cs │ │ │ │ └── SettingsViewModel.cs │ │ │ └── Windows/ │ │ │ └── MainWindowViewModel.cs │ │ ├── Views/ │ │ │ ├── Pages/ │ │ │ │ ├── DashboardPage.xaml │ │ │ │ ├── DashboardPage.xaml.cs │ │ │ │ ├── DataPage.xaml │ │ │ │ ├── DataPage.xaml.cs │ │ │ │ ├── SettingsPage.xaml │ │ │ │ └── SettingsPage.xaml.cs │ │ │ └── Windows/ │ │ │ ├── MainWindow.xaml │ │ │ └── MainWindow.xaml.cs │ │ ├── Wpf.Ui.Compact.csproj │ │ ├── Wpf.Ui.Compact.vstemplate │ │ ├── Wpf.Ui.Extension.Template.Compact.csproj │ │ └── app.manifest │ ├── Wpf.Ui.Extension.Template.Fluent/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AssemblyInfo.cs │ │ ├── Helpers/ │ │ │ └── EnumToBooleanConverter.cs │ │ ├── Models/ │ │ │ ├── AppConfig.cs │ │ │ └── DataColor.cs │ │ ├── Resources/ │ │ │ └── Translations.cs │ │ ├── Services/ │ │ │ └── ApplicationHostService.cs │ │ ├── Usings.cs │ │ ├── ViewModels/ │ │ │ ├── Pages/ │ │ │ │ ├── DashboardViewModel.cs │ │ │ │ ├── DataViewModel.cs │ │ │ │ └── SettingsViewModel.cs │ │ │ └── Windows/ │ │ │ └── MainWindowViewModel.cs │ │ ├── Views/ │ │ │ ├── Pages/ │ │ │ │ ├── DashboardPage.xaml │ │ │ │ ├── DashboardPage.xaml.cs │ │ │ │ ├── DataPage.xaml │ │ │ │ ├── DataPage.xaml.cs │ │ │ │ ├── SettingsPage.xaml │ │ │ │ └── SettingsPage.xaml.cs │ │ │ └── Windows/ │ │ │ ├── MainWindow.xaml │ │ │ └── MainWindow.xaml.cs │ │ ├── Wpf.Ui.Extension.Template.Fluent.csproj │ │ ├── Wpf.Ui.Fluent.csproj │ │ ├── Wpf.Ui.Fluent.vstemplate │ │ └── app.manifest │ ├── Wpf.Ui.FlaUI/ │ │ ├── AutoSuggestBox.cs │ │ ├── GlobalUsings.cs │ │ └── Wpf.Ui.FlaUI.csproj │ ├── Wpf.Ui.FontMapper/ │ │ ├── FontSource.cs │ │ ├── GitTag.cs │ │ ├── GlobalUsings.cs │ │ ├── License - Fluent System Icons.txt │ │ ├── Program.cs │ │ └── Wpf.Ui.FontMapper.csproj │ ├── Wpf.Ui.Gallery/ │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── AssemblyInfo.cs │ │ ├── Assets/ │ │ │ ├── Monaco/ │ │ │ │ ├── index.html │ │ │ │ └── min/ │ │ │ │ └── vs/ │ │ │ │ ├── base/ │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── worker/ │ │ │ │ │ │ ├── simpleWorker.nls.de.js │ │ │ │ │ │ ├── simpleWorker.nls.es.js │ │ │ │ │ │ ├── simpleWorker.nls.fr.js │ │ │ │ │ │ ├── simpleWorker.nls.it.js │ │ │ │ │ │ ├── simpleWorker.nls.ja.js │ │ │ │ │ │ ├── simpleWorker.nls.js │ │ │ │ │ │ ├── simpleWorker.nls.ko.js │ │ │ │ │ │ ├── simpleWorker.nls.ru.js │ │ │ │ │ │ ├── simpleWorker.nls.zh-cn.js │ │ │ │ │ │ └── simpleWorker.nls.zh-tw.js │ │ │ │ │ └── worker/ │ │ │ │ │ └── workerMain.js │ │ │ │ ├── basic-languages/ │ │ │ │ │ ├── abap/ │ │ │ │ │ │ └── abap.js │ │ │ │ │ ├── apex/ │ │ │ │ │ │ └── apex.js │ │ │ │ │ ├── azcli/ │ │ │ │ │ │ └── azcli.js │ │ │ │ │ ├── bat/ │ │ │ │ │ │ └── bat.js │ │ │ │ │ ├── bicep/ │ │ │ │ │ │ └── bicep.js │ │ │ │ │ ├── cameligo/ │ │ │ │ │ │ └── cameligo.js │ │ │ │ │ ├── clojure/ │ │ │ │ │ │ └── clojure.js │ │ │ │ │ ├── coffee/ │ │ │ │ │ │ └── coffee.js │ │ │ │ │ ├── cpp/ │ │ │ │ │ │ └── cpp.js │ │ │ │ │ ├── csharp/ │ │ │ │ │ │ └── csharp.js │ │ │ │ │ ├── csp/ │ │ │ │ │ │ └── csp.js │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── css.js │ │ │ │ │ ├── cypher/ │ │ │ │ │ │ └── cypher.js │ │ │ │ │ ├── dart/ │ │ │ │ │ │ └── dart.js │ │ │ │ │ ├── dockerfile/ │ │ │ │ │ │ └── dockerfile.js │ │ │ │ │ ├── ecl/ │ │ │ │ │ │ └── ecl.js │ │ │ │ │ ├── elixir/ │ │ │ │ │ │ └── elixir.js │ │ │ │ │ ├── flow9/ │ │ │ │ │ │ └── flow9.js │ │ │ │ │ ├── freemarker2/ │ │ │ │ │ │ └── freemarker2.js │ │ │ │ │ ├── fsharp/ │ │ │ │ │ │ └── fsharp.js │ │ │ │ │ ├── go/ │ │ │ │ │ │ └── go.js │ │ │ │ │ ├── graphql/ │ │ │ │ │ │ └── graphql.js │ │ │ │ │ ├── handlebars/ │ │ │ │ │ │ └── handlebars.js │ │ │ │ │ ├── hcl/ │ │ │ │ │ │ └── hcl.js │ │ │ │ │ ├── html/ │ │ │ │ │ │ └── html.js │ │ │ │ │ ├── ini/ │ │ │ │ │ │ └── ini.js │ │ │ │ │ ├── java/ │ │ │ │ │ │ └── java.js │ │ │ │ │ ├── javascript/ │ │ │ │ │ │ └── javascript.js │ │ │ │ │ ├── julia/ │ │ │ │ │ │ └── julia.js │ │ │ │ │ ├── kotlin/ │ │ │ │ │ │ └── kotlin.js │ │ │ │ │ ├── less/ │ │ │ │ │ │ └── less.js │ │ │ │ │ ├── lexon/ │ │ │ │ │ │ └── lexon.js │ │ │ │ │ ├── liquid/ │ │ │ │ │ │ └── liquid.js │ │ │ │ │ ├── lua/ │ │ │ │ │ │ └── lua.js │ │ │ │ │ ├── m3/ │ │ │ │ │ │ └── m3.js │ │ │ │ │ ├── markdown/ │ │ │ │ │ │ └── markdown.js │ │ │ │ │ ├── mdx/ │ │ │ │ │ │ └── mdx.js │ │ │ │ │ ├── mips/ │ │ │ │ │ │ └── mips.js │ │ │ │ │ ├── msdax/ │ │ │ │ │ │ └── msdax.js │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── mysql.js │ │ │ │ │ ├── objective-c/ │ │ │ │ │ │ └── objective-c.js │ │ │ │ │ ├── pascal/ │ │ │ │ │ │ └── pascal.js │ │ │ │ │ ├── pascaligo/ │ │ │ │ │ │ └── pascaligo.js │ │ │ │ │ ├── perl/ │ │ │ │ │ │ └── perl.js │ │ │ │ │ ├── pgsql/ │ │ │ │ │ │ └── pgsql.js │ │ │ │ │ ├── php/ │ │ │ │ │ │ └── php.js │ │ │ │ │ ├── pla/ │ │ │ │ │ │ └── pla.js │ │ │ │ │ ├── postiats/ │ │ │ │ │ │ └── postiats.js │ │ │ │ │ ├── powerquery/ │ │ │ │ │ │ └── powerquery.js │ │ │ │ │ ├── powershell/ │ │ │ │ │ │ └── powershell.js │ │ │ │ │ ├── protobuf/ │ │ │ │ │ │ └── protobuf.js │ │ │ │ │ ├── pug/ │ │ │ │ │ │ └── pug.js │ │ │ │ │ ├── python/ │ │ │ │ │ │ └── python.js │ │ │ │ │ ├── qsharp/ │ │ │ │ │ │ └── qsharp.js │ │ │ │ │ ├── r/ │ │ │ │ │ │ └── r.js │ │ │ │ │ ├── razor/ │ │ │ │ │ │ └── razor.js │ │ │ │ │ ├── redis/ │ │ │ │ │ │ └── redis.js │ │ │ │ │ ├── redshift/ │ │ │ │ │ │ └── redshift.js │ │ │ │ │ ├── restructuredtext/ │ │ │ │ │ │ └── restructuredtext.js │ │ │ │ │ ├── ruby/ │ │ │ │ │ │ └── ruby.js │ │ │ │ │ ├── rust/ │ │ │ │ │ │ └── rust.js │ │ │ │ │ ├── sb/ │ │ │ │ │ │ └── sb.js │ │ │ │ │ ├── scala/ │ │ │ │ │ │ └── scala.js │ │ │ │ │ ├── scheme/ │ │ │ │ │ │ └── scheme.js │ │ │ │ │ ├── scss/ │ │ │ │ │ │ └── scss.js │ │ │ │ │ ├── shell/ │ │ │ │ │ │ └── shell.js │ │ │ │ │ ├── solidity/ │ │ │ │ │ │ └── solidity.js │ │ │ │ │ ├── sophia/ │ │ │ │ │ │ └── sophia.js │ │ │ │ │ ├── sparql/ │ │ │ │ │ │ └── sparql.js │ │ │ │ │ ├── sql/ │ │ │ │ │ │ └── sql.js │ │ │ │ │ ├── st/ │ │ │ │ │ │ └── st.js │ │ │ │ │ ├── swift/ │ │ │ │ │ │ └── swift.js │ │ │ │ │ ├── systemverilog/ │ │ │ │ │ │ └── systemverilog.js │ │ │ │ │ ├── tcl/ │ │ │ │ │ │ └── tcl.js │ │ │ │ │ ├── twig/ │ │ │ │ │ │ └── twig.js │ │ │ │ │ ├── typescript/ │ │ │ │ │ │ └── typescript.js │ │ │ │ │ ├── vb/ │ │ │ │ │ │ └── vb.js │ │ │ │ │ ├── wgsl/ │ │ │ │ │ │ └── wgsl.js │ │ │ │ │ ├── xml/ │ │ │ │ │ │ └── xml.js │ │ │ │ │ └── yaml/ │ │ │ │ │ └── yaml.js │ │ │ │ ├── editor/ │ │ │ │ │ ├── editor.main.css │ │ │ │ │ ├── editor.main.js │ │ │ │ │ ├── editor.main.nls.de.js │ │ │ │ │ ├── editor.main.nls.es.js │ │ │ │ │ ├── editor.main.nls.fr.js │ │ │ │ │ ├── editor.main.nls.it.js │ │ │ │ │ ├── editor.main.nls.ja.js │ │ │ │ │ ├── editor.main.nls.js │ │ │ │ │ ├── editor.main.nls.ko.js │ │ │ │ │ ├── editor.main.nls.ru.js │ │ │ │ │ ├── editor.main.nls.zh-cn.js │ │ │ │ │ └── editor.main.nls.zh-tw.js │ │ │ │ ├── language/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── cssMode.js │ │ │ │ │ │ └── cssWorker.js │ │ │ │ │ ├── html/ │ │ │ │ │ │ ├── htmlMode.js │ │ │ │ │ │ └── htmlWorker.js │ │ │ │ │ ├── json/ │ │ │ │ │ │ ├── jsonMode.js │ │ │ │ │ │ └── jsonWorker.js │ │ │ │ │ └── typescript/ │ │ │ │ │ ├── tsMode.js │ │ │ │ │ └── tsWorker.js │ │ │ │ └── loader.js │ │ │ └── WinUiGallery/ │ │ │ └── LICENSE │ │ ├── CodeSamples/ │ │ │ └── Typography/ │ │ │ └── TypographySample_xaml.txt │ │ ├── Controllers/ │ │ │ └── MonacoController.cs │ │ ├── Controls/ │ │ │ ├── ControlExample.xaml │ │ │ ├── ControlExample.xaml.cs │ │ │ ├── GalleryNavigationPresenter.xaml │ │ │ ├── GalleryNavigationPresenter.xaml.cs │ │ │ ├── PageControlDocumentation.xaml │ │ │ ├── PageControlDocumentation.xaml.cs │ │ │ ├── TermsOfUseContentDialog.xaml │ │ │ ├── TermsOfUseContentDialog.xaml.cs │ │ │ ├── TypographyControl.xaml │ │ │ └── TypographyControl.xaml.cs │ │ ├── ControlsLookup/ │ │ │ ├── ControlPages.cs │ │ │ ├── GalleryPage.cs │ │ │ └── GalleryPageAttribute.cs │ │ ├── DependencyModel/ │ │ │ └── ServiceCollectionExtensions.cs │ │ ├── Effects/ │ │ │ ├── Snowflake.cs │ │ │ └── SnowflakeEffect.cs │ │ ├── GalleryAssembly.cs │ │ ├── GlobalUsings.cs │ │ ├── Helpers/ │ │ │ ├── EnumToBooleanConverter.cs │ │ │ ├── NameToPageTypeConverter.cs │ │ │ ├── NullToVisibilityConverter.cs │ │ │ ├── PaneDisplayModeToIndexConverter.cs │ │ │ └── ThemeToIndexConverter.cs │ │ ├── License - Images.txt │ │ ├── License - Monaco.txt │ │ ├── Models/ │ │ │ ├── DisplayableIcon.cs │ │ │ ├── Folder.cs │ │ │ ├── Monaco/ │ │ │ │ ├── MonacoLanguage.cs │ │ │ │ └── MonacoTheme.cs │ │ │ ├── NavigationCard.cs │ │ │ ├── Person.cs │ │ │ ├── Product.cs │ │ │ ├── Unit.cs │ │ │ └── WindowCard.cs │ │ ├── Resources/ │ │ │ ├── Translations.cs │ │ │ ├── Translations.pl-PL.Designer.cs │ │ │ └── Translations.pl-PL.resx │ │ ├── Services/ │ │ │ ├── ApplicationHostService.cs │ │ │ ├── Contracts/ │ │ │ │ └── IWindow.cs │ │ │ └── WindowsProviderService.cs │ │ ├── ViewModels/ │ │ │ ├── Pages/ │ │ │ │ ├── AllControlsViewModel.cs │ │ │ │ ├── BasicInput/ │ │ │ │ │ ├── AnchorViewModel.cs │ │ │ │ │ ├── BasicInputViewModel.cs │ │ │ │ │ ├── ButtonViewModel.cs │ │ │ │ │ ├── CheckBoxViewModel.cs │ │ │ │ │ ├── ComboBoxViewModel.cs │ │ │ │ │ ├── DropDownButtonViewModel.cs │ │ │ │ │ ├── HyperlinkButtonViewModel.cs │ │ │ │ │ ├── RadioButtonViewModel.cs │ │ │ │ │ ├── RatingViewModel.cs │ │ │ │ │ ├── SliderViewModel.cs │ │ │ │ │ ├── SplitButtonViewModel.cs │ │ │ │ │ ├── ThumbRateViewModel.cs │ │ │ │ │ ├── ToggleButtonViewModel.cs │ │ │ │ │ └── ToggleSwitchViewModel.cs │ │ │ │ ├── Collections/ │ │ │ │ │ ├── CollectionsViewModel.cs │ │ │ │ │ ├── DataGridViewModel.cs │ │ │ │ │ ├── ListBoxViewModel.cs │ │ │ │ │ ├── ListViewViewModel.cs │ │ │ │ │ ├── TreeListViewModel.cs │ │ │ │ │ └── TreeViewViewModel.cs │ │ │ │ ├── DashboardViewModel.cs │ │ │ │ ├── DateAndTime/ │ │ │ │ │ ├── CalendarDatePickerViewModel.cs │ │ │ │ │ ├── CalendarViewModel.cs │ │ │ │ │ ├── DateAndTimeViewModel.cs │ │ │ │ │ ├── DatePickerViewModel.cs │ │ │ │ │ └── TimePickerViewModel.cs │ │ │ │ ├── DesignGuidance/ │ │ │ │ │ ├── ColorsViewModel.cs │ │ │ │ │ ├── IconsViewModel.cs │ │ │ │ │ └── TypographyViewModel.cs │ │ │ │ ├── DialogsAndFlyouts/ │ │ │ │ │ ├── ContentDialogViewModel.cs │ │ │ │ │ ├── DialogsAndFlyoutsViewModel.cs │ │ │ │ │ ├── FlyoutViewModel.cs │ │ │ │ │ ├── MessageBoxViewModel.cs │ │ │ │ │ └── SnackbarViewModel.cs │ │ │ │ ├── Layout/ │ │ │ │ │ ├── CardActionViewModel.cs │ │ │ │ │ ├── CardControlViewModel.cs │ │ │ │ │ ├── ExpanderViewModel.cs │ │ │ │ │ └── LayoutViewModel.cs │ │ │ │ ├── Media/ │ │ │ │ │ ├── CanvasViewModel.cs │ │ │ │ │ ├── ImageViewModel.cs │ │ │ │ │ ├── MediaViewModel.cs │ │ │ │ │ ├── WebBrowserViewModel.cs │ │ │ │ │ └── WebViewViewModel.cs │ │ │ │ ├── Navigation/ │ │ │ │ │ ├── BreadcrumbBarViewModel.cs │ │ │ │ │ ├── MenuViewModel.cs │ │ │ │ │ ├── MultilevelNavigationSample.cs │ │ │ │ │ ├── NavigationViewModel.cs │ │ │ │ │ ├── NavigationViewViewModel.cs │ │ │ │ │ ├── TabControlViewModel.cs │ │ │ │ │ └── TabViewViewModel.cs │ │ │ │ ├── OpSystem/ │ │ │ │ │ ├── ClipboardViewModel.cs │ │ │ │ │ ├── FilePickerViewModel.cs │ │ │ │ │ └── OpSystemViewModel.cs │ │ │ │ ├── SettingsViewModel.cs │ │ │ │ ├── StatusAndInfo/ │ │ │ │ │ ├── InfoBadgeViewModel.cs │ │ │ │ │ ├── InfoBarViewModel.cs │ │ │ │ │ ├── ProgressBarViewModel.cs │ │ │ │ │ ├── ProgressRingViewModel.cs │ │ │ │ │ ├── StatusAndInfoViewModel.cs │ │ │ │ │ └── ToolTipViewModel.cs │ │ │ │ ├── Text/ │ │ │ │ │ ├── AutoSuggestBoxViewModel.cs │ │ │ │ │ ├── LabelViewModel.cs │ │ │ │ │ ├── NumberBoxViewModel.cs │ │ │ │ │ ├── PasswordBoxViewModel.cs │ │ │ │ │ ├── RichTextBoxViewModel.cs │ │ │ │ │ ├── TextBlockViewModel.cs │ │ │ │ │ ├── TextBoxViewModel.cs │ │ │ │ │ └── TextViewModel.cs │ │ │ │ └── Windows/ │ │ │ │ └── WindowsViewModel.cs │ │ │ ├── ViewModel.cs │ │ │ └── Windows/ │ │ │ ├── EditorWindowViewModel.cs │ │ │ ├── MainWindowViewModel.cs │ │ │ ├── MonacoWindowViewModel.cs │ │ │ └── SandboxWindowViewModel.cs │ │ ├── Views/ │ │ │ ├── Pages/ │ │ │ │ ├── AllControlsPage.xaml │ │ │ │ ├── AllControlsPage.xaml.cs │ │ │ │ ├── BasicInput/ │ │ │ │ │ ├── AnchorPage.xaml │ │ │ │ │ ├── AnchorPage.xaml.cs │ │ │ │ │ ├── BasicInputPage.xaml │ │ │ │ │ ├── BasicInputPage.xaml.cs │ │ │ │ │ ├── ButtonPage.xaml │ │ │ │ │ ├── ButtonPage.xaml.cs │ │ │ │ │ ├── CheckBoxPage.xaml │ │ │ │ │ ├── CheckBoxPage.xaml.cs │ │ │ │ │ ├── ComboBoxPage.xaml │ │ │ │ │ ├── ComboBoxPage.xaml.cs │ │ │ │ │ ├── DropDownButtonPage.xaml │ │ │ │ │ ├── DropDownButtonPage.xaml.cs │ │ │ │ │ ├── HyperlinkButtonPage.xaml │ │ │ │ │ ├── HyperlinkButtonPage.xaml.cs │ │ │ │ │ ├── RadioButtonPage.xaml │ │ │ │ │ ├── RadioButtonPage.xaml.cs │ │ │ │ │ ├── RatingPage.xaml │ │ │ │ │ ├── RatingPage.xaml.cs │ │ │ │ │ ├── SliderPage.xaml │ │ │ │ │ ├── SliderPage.xaml.cs │ │ │ │ │ ├── SplitButtonPage.xaml │ │ │ │ │ ├── SplitButtonPage.xaml.cs │ │ │ │ │ ├── ThumbRatePage.xaml │ │ │ │ │ ├── ThumbRatePage.xaml.cs │ │ │ │ │ ├── ToggleButtonPage.xaml │ │ │ │ │ ├── ToggleButtonPage.xaml.cs │ │ │ │ │ ├── ToggleSwitchPage.xaml │ │ │ │ │ └── ToggleSwitchPage.xaml.cs │ │ │ │ ├── Collections/ │ │ │ │ │ ├── CollectionsPage.xaml │ │ │ │ │ ├── CollectionsPage.xaml.cs │ │ │ │ │ ├── DataGridPage.xaml │ │ │ │ │ ├── DataGridPage.xaml.cs │ │ │ │ │ ├── ListBoxPage.xaml │ │ │ │ │ ├── ListBoxPage.xaml.cs │ │ │ │ │ ├── ListViewPage.xaml │ │ │ │ │ ├── ListViewPage.xaml.cs │ │ │ │ │ ├── TreeListPage.xaml │ │ │ │ │ ├── TreeListPage.xaml.cs │ │ │ │ │ ├── TreeViewPage.xaml │ │ │ │ │ └── TreeViewPage.xaml.cs │ │ │ │ ├── DashboardPage.xaml │ │ │ │ ├── DashboardPage.xaml.cs │ │ │ │ ├── DateAndTime/ │ │ │ │ │ ├── CalendarDatePickerPage.xaml │ │ │ │ │ ├── CalendarDatePickerPage.xaml.cs │ │ │ │ │ ├── CalendarPage.xaml │ │ │ │ │ ├── CalendarPage.xaml.cs │ │ │ │ │ ├── DateAndTimePage.xaml │ │ │ │ │ ├── DateAndTimePage.xaml.cs │ │ │ │ │ ├── DatePickerPage.xaml │ │ │ │ │ ├── DatePickerPage.xaml.cs │ │ │ │ │ ├── TimePickerPage.xaml │ │ │ │ │ └── TimePickerPage.xaml.cs │ │ │ │ ├── DesignGuidance/ │ │ │ │ │ ├── ColorsPage.xaml │ │ │ │ │ ├── ColorsPage.xaml.cs │ │ │ │ │ ├── IconsPage.xaml │ │ │ │ │ ├── IconsPage.xaml.cs │ │ │ │ │ ├── TypographyPage.xaml │ │ │ │ │ └── TypographyPage.xaml.cs │ │ │ │ ├── DialogsAndFlyouts/ │ │ │ │ │ ├── ContentDialogPage.xaml │ │ │ │ │ ├── ContentDialogPage.xaml.cs │ │ │ │ │ ├── DialogsAndFlyoutsPage.xaml │ │ │ │ │ ├── DialogsAndFlyoutsPage.xaml.cs │ │ │ │ │ ├── FlyoutPage.xaml │ │ │ │ │ ├── FlyoutPage.xaml.cs │ │ │ │ │ ├── MessageBoxPage.xaml │ │ │ │ │ ├── MessageBoxPage.xaml.cs │ │ │ │ │ ├── SnackbarPage.xaml │ │ │ │ │ └── SnackbarPage.xaml.cs │ │ │ │ ├── Layout/ │ │ │ │ │ ├── CardActionPage.xaml │ │ │ │ │ ├── CardActionPage.xaml.cs │ │ │ │ │ ├── CardControlPage.xaml │ │ │ │ │ ├── CardControlPage.xaml.cs │ │ │ │ │ ├── ExpanderPage.xaml │ │ │ │ │ ├── ExpanderPage.xaml.cs │ │ │ │ │ ├── LayoutPage.xaml │ │ │ │ │ └── LayoutPage.xaml.cs │ │ │ │ ├── Media/ │ │ │ │ │ ├── CanvasPage.xaml │ │ │ │ │ ├── CanvasPage.xaml.cs │ │ │ │ │ ├── ImagePage.xaml │ │ │ │ │ ├── ImagePage.xaml.cs │ │ │ │ │ ├── MediaPage.xaml │ │ │ │ │ ├── MediaPage.xaml.cs │ │ │ │ │ ├── WebBrowserPage.xaml │ │ │ │ │ ├── WebBrowserPage.xaml.cs │ │ │ │ │ ├── WebViewPage.xaml │ │ │ │ │ └── WebViewPage.xaml.cs │ │ │ │ ├── Navigation/ │ │ │ │ │ ├── BreadcrumbBarPage.xaml │ │ │ │ │ ├── BreadcrumbBarPage.xaml.cs │ │ │ │ │ ├── MenuPage.xaml │ │ │ │ │ ├── MenuPage.xaml.cs │ │ │ │ │ ├── MultilevelNavigationPage.xaml │ │ │ │ │ ├── MultilevelNavigationPage.xaml.cs │ │ │ │ │ ├── NavigationPage.xaml │ │ │ │ │ ├── NavigationPage.xaml.cs │ │ │ │ │ ├── NavigationViewPage.xaml │ │ │ │ │ ├── NavigationViewPage.xaml.cs │ │ │ │ │ ├── TabControlPage.xaml │ │ │ │ │ ├── TabControlPage.xaml.cs │ │ │ │ │ ├── TabViewPage.xaml │ │ │ │ │ └── TabViewPage.xaml.cs │ │ │ │ ├── OpSystem/ │ │ │ │ │ ├── ClipboardPage.xaml │ │ │ │ │ ├── ClipboardPage.xaml.cs │ │ │ │ │ ├── FilePickerPage.xaml │ │ │ │ │ ├── FilePickerPage.xaml.cs │ │ │ │ │ ├── OpSystemPage.xaml │ │ │ │ │ └── OpSystemPage.xaml.cs │ │ │ │ ├── Samples/ │ │ │ │ │ ├── MultilevelNavigationSamplePage1.xaml │ │ │ │ │ ├── MultilevelNavigationSamplePage1.xaml.cs │ │ │ │ │ ├── MultilevelNavigationSamplePage2.xaml │ │ │ │ │ ├── MultilevelNavigationSamplePage2.xaml.cs │ │ │ │ │ ├── MultilevelNavigationSamplePage3.xaml │ │ │ │ │ ├── MultilevelNavigationSamplePage3.xaml.cs │ │ │ │ │ ├── SamplePage1.xaml │ │ │ │ │ ├── SamplePage1.xaml.cs │ │ │ │ │ ├── SamplePage2.xaml │ │ │ │ │ ├── SamplePage2.xaml.cs │ │ │ │ │ ├── SamplePage3.xaml │ │ │ │ │ └── SamplePage3.xaml.cs │ │ │ │ ├── SettingsPage.xaml │ │ │ │ ├── SettingsPage.xaml.cs │ │ │ │ ├── StatusAndInfo/ │ │ │ │ │ ├── InfoBadgePage.xaml │ │ │ │ │ ├── InfoBadgePage.xaml.cs │ │ │ │ │ ├── InfoBarPage.xaml │ │ │ │ │ ├── InfoBarPage.xaml.cs │ │ │ │ │ ├── ProgressBarPage.xaml │ │ │ │ │ ├── ProgressBarPage.xaml.cs │ │ │ │ │ ├── ProgressRingPage.xaml │ │ │ │ │ ├── ProgressRingPage.xaml.cs │ │ │ │ │ ├── StatusAndInfoPage.xaml │ │ │ │ │ ├── StatusAndInfoPage.xaml.cs │ │ │ │ │ ├── ToolTipPage.xaml │ │ │ │ │ └── ToolTipPage.xaml.cs │ │ │ │ ├── Text/ │ │ │ │ │ ├── AutoSuggestBoxPage.xaml │ │ │ │ │ ├── AutoSuggestBoxPage.xaml.cs │ │ │ │ │ ├── LabelPage.xaml │ │ │ │ │ ├── LabelPage.xaml.cs │ │ │ │ │ ├── NumberBoxPage.xaml │ │ │ │ │ ├── NumberBoxPage.xaml.cs │ │ │ │ │ ├── PasswordBoxPage.xaml │ │ │ │ │ ├── PasswordBoxPage.xaml.cs │ │ │ │ │ ├── RichTextBoxPage.xaml │ │ │ │ │ ├── RichTextBoxPage.xaml.cs │ │ │ │ │ ├── TextBlockPage.xaml │ │ │ │ │ ├── TextBlockPage.xaml.cs │ │ │ │ │ ├── TextBoxPage.xaml │ │ │ │ │ ├── TextBoxPage.xaml.cs │ │ │ │ │ ├── TextPage.xaml │ │ │ │ │ └── TextPage.xaml.cs │ │ │ │ └── Windows/ │ │ │ │ ├── WindowsPage.xaml │ │ │ │ └── WindowsPage.xaml.cs │ │ │ └── Windows/ │ │ │ ├── EditorWindow.xaml │ │ │ ├── EditorWindow.xaml.cs │ │ │ ├── MainWindow.xaml │ │ │ ├── MainWindow.xaml.cs │ │ │ ├── MonacoWindow.xaml │ │ │ ├── MonacoWindow.xaml.cs │ │ │ ├── SandboxWindow.xaml │ │ │ └── SandboxWindow.xaml.cs │ │ ├── Wpf.Ui.Gallery.csproj │ │ └── app.manifest │ ├── Wpf.Ui.Gallery.Package/ │ │ ├── Package.appxmanifest │ │ └── Wpf.Ui.Gallery.Package.wapproj │ ├── Wpf.Ui.SyntaxHighlight/ │ │ ├── Controls/ │ │ │ ├── CodeBlock.cs │ │ │ └── CodeBlock.xaml │ │ ├── Highlighter.cs │ │ ├── License - Fira Code.txt │ │ ├── Markup/ │ │ │ └── SyntaxHighlightDictionary.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── SyntaxHighlight.xaml │ │ ├── SyntaxLanguage.cs │ │ └── Wpf.Ui.SyntaxHighlight.csproj │ ├── Wpf.Ui.ToastNotifications/ │ │ ├── GlobalUsings.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── Toast.cs │ │ ├── VisualStudioToolsManifest.xml │ │ └── Wpf.Ui.ToastNotifications.csproj │ └── Wpf.Ui.Tray/ │ ├── Controls/ │ │ └── NotifyIcon.cs │ ├── GlobalUsings.cs │ ├── Hicon.cs │ ├── INotifyIcon.cs │ ├── INotifyIconService.cs │ ├── Internal/ │ │ └── InternalNotifyIconManager.cs │ ├── Interop/ │ │ ├── Libraries.cs │ │ ├── Shell32.cs │ │ └── User32.cs │ ├── NotifyIconEventHandler.cs │ ├── NotifyIconService.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── RoutedNotifyIconEvent.cs │ ├── TrayData.cs │ ├── TrayHandler.cs │ ├── TrayManager.cs │ ├── VisualStudioToolsManifest.xml │ └── Wpf.Ui.Tray.csproj └── tests/ ├── Wpf.Ui.Gallery.IntegrationTests/ │ ├── ContentDialogAutomationTests.cs │ ├── Fixtures/ │ │ ├── TestedApplication.cs │ │ └── UiTest.cs │ ├── GlobalUsings.cs │ ├── NavigationTests.cs │ ├── TitleBarTests.cs │ ├── WindowTests.cs │ ├── Wpf.Ui.Gallery.IntegrationTests.csproj │ └── xunit.runner.json └── Wpf.Ui.UnitTests/ ├── Animations/ │ └── TransitionAnimationProviderTests.cs ├── Extensions/ │ └── SymbolExtensionsTests.cs ├── Usings.cs └── Wpf.Ui.UnitTests.csproj ================================================ FILE CONTENTS ================================================ ================================================ FILE: .config/dotnet-tools.json ================================================ { "version": 1, "isRoot": true, "tools": { "csharpier": { "version": "1.0.1", "commands": [ "csharpier" ], "rollForward": false } } } ================================================ FILE: .csharpierignore ================================================ *.csproj *.xaml ================================================ FILE: .csharpierrc ================================================ { "printWidth": 110, "useTabs": false, "tabWidth": 4, "preprocessorSymbolSets": [ "", "DEBUG", "DEBUG,CODE_STYLE" ] } ================================================ FILE: .devcontainer/devcontainer.json ================================================ { "name": "WPF UI Docs Dev Container", "image": "mcr.microsoft.com/dotnet/sdk:9.0", "features": { "ghcr.io/devcontainers/features/node:1": { "version": "20" } }, "postCreateCommand": "./.devcontainer/post-create.sh", "forwardPorts": [ 8080 ], "remoteEnv": { "NODE_ENV": "development" } } ================================================ FILE: .devcontainer/post-create.sh ================================================ #!/bin/sh apt-get update apt-get install -y openssh-client cd docs/templates npm ci npm run build dotnet tool install -g docfx export PATH="$PATH:/root/.dotnet/tools" cd ../ docfx docfx.json --serve ================================================ FILE: .editorconfig ================================================ # Remove the line below if you want to inherit .editorconfig settings from higher directories root = true # All files [*] #### Core EditorConfig Options #### # Encoding charset = utf-8 # Indentation and spacing tab_width = 4 indent_size = 4 indent_style = space # New line preferences end_of_line = unset insert_final_newline = false #### Build files #### # Solution files [*.{sln,slnx}] tab_width = 4 indent_size = 4 indent_style = tab # Configuration files [*.{json,xml,yml,config,runsettings}] indent_size = 2 # MSBuild files [*.{slnf,props,targets,projitems,csproj,shproj}] indent_size = 2 #### Source files #### # Markdown files [*.md] indent_size = 2 insert_final_newline = true # C# files [*.cs] #### File Header Template #### file_header_template = This Source Code Form is subject to the terms of the MIT License.\nIf a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT.\nCopyright (C) Leszek Pomianowski and WPF UI Contributors.\nAll Rights Reserved. #### .NET Coding Conventions #### # this. and Me. preferences dotnet_style_qualification_for_event = false:silent dotnet_style_qualification_for_field = false:silent dotnet_style_qualification_for_method = false:silent dotnet_style_qualification_for_property = false:silent # Language keywords vs BCL types preferences dotnet_style_predefined_type_for_locals_parameters_members = true:warning dotnet_style_predefined_type_for_member_access = true:warning # Parentheses preferences dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent # Modifier preferences (set to silent until https://github.com/dotnet/roslyn/issues/52904 is resolved) dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent # Code block preferences dotnet_style_allow_multiple_blank_lines_experimental = false:warning dotnet_style_allow_statement_immediately_after_block_experimental = false:warning # Expression-level preferences csharp_style_deconstructed_variable_declaration = true:suggestion csharp_style_inlined_variable_declaration = true:silent csharp_style_throw_expression = true:suggestion dotnet_style_coalesce_expression = true:suggestion dotnet_style_collection_initializer = true:suggestion dotnet_style_explicit_tuple_names = true:suggestion dotnet_style_null_propagation = true:suggestion dotnet_style_object_initializer = true:suggestion dotnet_style_prefer_auto_properties = true:silent dotnet_style_prefer_conditional_expression_over_assignment = true:silent dotnet_style_prefer_conditional_expression_over_return = true:silent dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion dotnet_style_prefer_inferred_tuple_names = true:suggestion dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning # Field preferences dotnet_style_readonly_field = true:warning #### C# Coding Conventions #### # var preferences csharp_style_var_elsewhere = false:warning csharp_style_var_for_built_in_types = false:none csharp_style_var_when_type_is_apparent = false:none # Expression-bodied members csharp_style_expression_bodied_accessors = false:silent csharp_style_expression_bodied_constructors = false:silent csharp_style_expression_bodied_indexers = false:silent csharp_style_expression_bodied_lambdas = true:silent csharp_style_expression_bodied_methods = false:silent csharp_style_expression_bodied_operators = false:silent csharp_style_expression_bodied_properties = false:silent # Pattern matching preferences csharp_style_prefer_pattern_matching = true:suggestion csharp_style_pattern_matching_over_as_with_null_check = true:suggestion csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion # Null-checking preferences csharp_style_conditional_delegate_call = true:suggestion # Modifier preferences csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async # Code-block preferences csharp_prefer_braces = true:suggestion csharp_using_directive_placement = outside_namespace:warning csharp_style_namespace_declarations = file_scoped:warning csharp_style_unused_value_assignment_preference = discard_variable:warning csharp_style_unused_value_expression_statement_preference = discard_variable:warning csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:warning # Expression-level preferences csharp_prefer_simple_default_expression = true:suggestion csharp_prefer_static_local_function = true:warning csharp_style_pattern_local_over_anonymous_function = true:warning #### C# Formatting Rules #### # New line preferences csharp_new_line_before_catch = true csharp_new_line_before_else = true csharp_new_line_before_finally = true csharp_new_line_before_members_in_anonymous_types = true csharp_new_line_before_members_in_object_initializers = true csharp_new_line_before_open_brace = all csharp_new_line_between_query_expression_clauses = true # Indentation preferences csharp_indent_block_contents = true csharp_indent_braces = false csharp_indent_case_contents = true csharp_indent_case_contents_when_block = false csharp_indent_labels = no_change csharp_indent_switch_labels = true # Space preferences csharp_space_after_cast = false csharp_space_after_colon_in_inheritance_clause = true csharp_space_after_comma = true csharp_space_after_dot = false csharp_space_after_keywords_in_control_flow_statements = true csharp_space_after_semicolon_in_for_statement = true csharp_space_around_binary_operators = before_and_after csharp_space_around_declaration_statements = false csharp_space_before_colon_in_inheritance_clause = true csharp_space_before_comma = false csharp_space_before_dot = false csharp_space_before_open_square_brackets = false csharp_space_before_semicolon_in_for_statement = false csharp_space_between_empty_square_brackets = false csharp_space_between_method_call_empty_parameter_list_parentheses = false csharp_space_between_method_call_name_and_opening_parenthesis = false csharp_space_between_method_call_parameter_list_parentheses = false csharp_space_between_method_declaration_empty_parameter_list_parentheses = false csharp_space_between_method_declaration_name_and_open_parenthesis = false csharp_space_between_method_declaration_parameter_list_parentheses = false csharp_space_between_parentheses = false csharp_space_between_square_brackets = false # Wrapping preferences csharp_preserve_single_line_blocks = true csharp_preserve_single_line_statements = true # Naming Symbols # constant_fields - Define constant fields dotnet_naming_symbols.constant_fields.applicable_kinds = field dotnet_naming_symbols.constant_fields.required_modifiers = const # non_private_readonly_fields - Define public, internal and protected readonly fields dotnet_naming_symbols.non_private_readonly_fields.applicable_accessibilities = public, internal, protected dotnet_naming_symbols.non_private_readonly_fields.applicable_kinds = field dotnet_naming_symbols.non_private_readonly_fields.required_modifiers = readonly # static_readonly_fields - Define static and readonly fields dotnet_naming_symbols.static_readonly_fields.applicable_kinds = field dotnet_naming_symbols.static_readonly_fields.required_modifiers = static, readonly # private_readonly_fields - Define private readonly fields dotnet_naming_symbols.private_readonly_fields.applicable_accessibilities = private dotnet_naming_symbols.private_readonly_fields.applicable_kinds = field dotnet_naming_symbols.private_readonly_fields.required_modifiers = readonly # public_internal_fields - Define public and internal fields dotnet_naming_symbols.public_internal_protected_fields.applicable_accessibilities = public, internal, protected dotnet_naming_symbols.public_internal_protected_fields.applicable_kinds = field # private_protected_fields - Define private and protected fields dotnet_naming_symbols.private_protected_fields.applicable_accessibilities = private, protected dotnet_naming_symbols.private_protected_fields.applicable_kinds = field # public_symbols - Define any public symbol dotnet_naming_symbols.public_symbols.applicable_accessibilities = public, internal, protected, protected_internal dotnet_naming_symbols.public_symbols.applicable_kinds = method, property, event, delegate # parameters - Defines any parameter dotnet_naming_symbols.parameters.applicable_kinds = parameter # non_interface_types - Defines class, struct, enum and delegate types dotnet_naming_symbols.non_interface_types.applicable_kinds = class, struct, enum, delegate # interface_types - Defines interfaces dotnet_naming_symbols.interface_types.applicable_kinds = interface # Naming Styles # camel_case - Define the camelCase style dotnet_naming_style.camel_case.capitalization = camel_case # pascal_case - Define the Pascal_case style dotnet_naming_style.pascal_case.capitalization = pascal_case # first_upper - The first character must start with an upper-case character dotnet_naming_style.first_upper.capitalization = first_word_upper # prefix_interface_interface_with_i - Interfaces must be PascalCase and the first character of an interface must be an 'I' dotnet_naming_style.prefix_interface_interface_with_i.capitalization = pascal_case dotnet_naming_style.prefix_interface_interface_with_i.required_prefix = I # Naming Rules # Async dotnet_naming_rule.async_methods_end_in_async.severity = silent dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods dotnet_naming_rule.async_methods_end_in_async.style = end_in_async dotnet_naming_symbols.any_async_methods.applicable_kinds = method dotnet_naming_symbols.any_async_methods.applicable_accessibilities = * dotnet_naming_symbols.any_async_methods.required_modifiers = async dotnet_naming_style.end_in_async.required_suffix = Async dotnet_naming_style.end_in_async.capitalization = pascal_case # Constant fields must be PascalCase dotnet_naming_rule.constant_fields_must_be_pascal_case.severity = silent dotnet_naming_rule.constant_fields_must_be_pascal_case.symbols = constant_fields dotnet_naming_rule.constant_fields_must_be_pascal_case.style = pascal_case # Public, internal and protected readonly fields must be PascalCase dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.severity = silent dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.symbols = non_private_readonly_fields dotnet_naming_rule.non_private_readonly_fields_must_be_pascal_case.style = pascal_case # Static readonly fields must be PascalCase dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.severity = silent dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.symbols = static_readonly_fields dotnet_naming_rule.static_readonly_fields_must_be_pascal_case.style = pascal_case # Private readonly fields must be camelCase dotnet_naming_rule.private_readonly_fields_must_be_camel_case.severity = silent dotnet_naming_rule.private_readonly_fields_must_be_camel_case.symbols = private_readonly_fields dotnet_naming_rule.private_readonly_fields_must_be_camel_case.style = camel_case # Public and internal fields must be PascalCase dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.severity = silent dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.symbols = public_internal_protected_fields dotnet_naming_rule.public_internal_protected_fields_must_be_pascal_case.style = pascal_case # Private and protected fields must be camelCase dotnet_naming_rule.private_fields_must_be_camel_case.severity = silent dotnet_naming_rule.private_fields_must_be_camel_case.symbols = private_protected_fields dotnet_naming_rule.private_fields_must_be_camel_case.style = prefix_private_field_with_underscore # Public members must be capitalized dotnet_naming_rule.public_members_must_be_capitalized.severity = silent dotnet_naming_rule.public_members_must_be_capitalized.symbols = public_symbols dotnet_naming_rule.public_members_must_be_capitalized.style = first_upper # Parameters must be camelCase dotnet_naming_rule.parameters_must_be_camel_case.severity = silent dotnet_naming_rule.parameters_must_be_camel_case.symbols = parameters dotnet_naming_rule.parameters_must_be_camel_case.style = camel_case # Class, struct, enum and delegates must be PascalCase dotnet_naming_rule.non_interface_types_must_be_pascal_case.severity = silent dotnet_naming_rule.non_interface_types_must_be_pascal_case.symbols = non_interface_types dotnet_naming_rule.non_interface_types_must_be_pascal_case.style = pascal_case # Interfaces must be PascalCase and start with an 'I' dotnet_naming_rule.interface_types_must_be_prefixed_with_i.severity = silent dotnet_naming_rule.interface_types_must_be_prefixed_with_i.symbols = interface_types dotnet_naming_rule.interface_types_must_be_prefixed_with_i.style = prefix_interface_interface_with_i # prefix_private_field_with_underscore - Private fields must be prefixed with _ dotnet_naming_style.prefix_private_field_with_underscore.capitalization = camel_case dotnet_naming_style.prefix_private_field_with_underscore.required_prefix = _ # .NET Code Analysis dotnet_diagnostic.CA1001.severity = warning dotnet_diagnostic.CA1009.severity = warning dotnet_diagnostic.CA1016.severity = warning dotnet_diagnostic.CA1033.severity = warning dotnet_diagnostic.CA1049.severity = warning dotnet_diagnostic.CA1060.severity = warning dotnet_diagnostic.CA1061.severity = warning dotnet_diagnostic.CA1063.severity = warning dotnet_diagnostic.CA1065.severity = warning dotnet_diagnostic.CA1301.severity = warning dotnet_diagnostic.CA1400.severity = warning dotnet_diagnostic.CA1401.severity = warning dotnet_diagnostic.CA1403.severity = warning dotnet_diagnostic.CA1404.severity = warning dotnet_diagnostic.CA1405.severity = warning dotnet_diagnostic.CA1410.severity = warning dotnet_diagnostic.CA1415.severity = warning dotnet_diagnostic.CA1821.severity = warning dotnet_diagnostic.CA1900.severity = warning dotnet_diagnostic.CA1901.severity = warning dotnet_diagnostic.CA2002.severity = warning dotnet_diagnostic.CA2100.severity = warning dotnet_diagnostic.CA2101.severity = warning dotnet_diagnostic.CA2108.severity = warning dotnet_diagnostic.CA2111.severity = warning dotnet_diagnostic.CA2112.severity = warning dotnet_diagnostic.CA2114.severity = warning dotnet_diagnostic.CA2116.severity = warning dotnet_diagnostic.CA2117.severity = warning dotnet_diagnostic.CA2122.severity = warning dotnet_diagnostic.CA2123.severity = warning dotnet_diagnostic.CA2124.severity = warning dotnet_diagnostic.CA2126.severity = warning dotnet_diagnostic.CA2131.severity = warning dotnet_diagnostic.CA2132.severity = warning dotnet_diagnostic.CA2133.severity = warning dotnet_diagnostic.CA2134.severity = warning dotnet_diagnostic.CA2137.severity = warning dotnet_diagnostic.CA2138.severity = warning dotnet_diagnostic.CA2140.severity = warning dotnet_diagnostic.CA2141.severity = warning dotnet_diagnostic.CA2146.severity = warning dotnet_diagnostic.CA2147.severity = warning dotnet_diagnostic.CA2149.severity = warning dotnet_diagnostic.CA2200.severity = warning dotnet_diagnostic.CA2202.severity = warning dotnet_diagnostic.CA2207.severity = warning dotnet_diagnostic.CA2212.severity = warning dotnet_diagnostic.CA2213.severity = warning dotnet_diagnostic.CA2214.severity = warning dotnet_diagnostic.CA2216.severity = warning dotnet_diagnostic.CA2220.severity = warning dotnet_diagnostic.CA2229.severity = warning dotnet_diagnostic.CA2231.severity = warning dotnet_diagnostic.CA2232.severity = warning dotnet_diagnostic.CA2235.severity = warning dotnet_diagnostic.CA2236.severity = warning dotnet_diagnostic.CA2237.severity = warning dotnet_diagnostic.CA2238.severity = warning dotnet_diagnostic.CA2240.severity = warning dotnet_diagnostic.CA2241.severity = warning dotnet_diagnostic.CA2242.severity = warning # Require file header OR A source file contains a header that does not match the required text dotnet_diagnostic.IDE0073.severity = error dotnet_diagnostic.IDE0058.severity = silent dotnet_diagnostic.MC3080.severity = none # StyleCop Code Analysis # Closing parenthesis should be spaced correctly: "foo()!" dotnet_diagnostic.SA1009.severity = none # Hide warnings when using the new() expression from C# 9. dotnet_diagnostic.SA1000.severity = none dotnet_diagnostic.SA1011.severity = none dotnet_diagnostic.SA1101.severity = none # Hide warnings when accessing properties without "this". dotnet_diagnostic.SA1101.severity = none dotnet_diagnostic.SA1118.severity = none dotnet_diagnostic.SA1200.severity = none dotnet_diagnostic.SA1201.severity = none dotnet_diagnostic.SA1202.severity = none dotnet_diagnostic.SA1309.severity = none dotnet_diagnostic.SA1310.severity = none # Hide warnings for record parameters. dotnet_diagnostic.SA1313.severity = none # TypeParameterNamesMustBeginWithT: We do have a few templates that don't start with T. We need to double check that changing this is not a breaking change. If not, we can re-enable this. dotnet_diagnostic.SA1314.severity = none # UseTrailingCommasInMultiLineInitializers: This would also mean a lot of changes at the end of all multiline initializers. It's also debatable if we want this or not. dotnet_diagnostic.SA1413.severity = none dotnet_diagnostic.SA1600.severity = none dotnet_diagnostic.SA1602.severity = none dotnet_diagnostic.SA1611.severity = none # DocumentationTextMustEndWithAPeriod: Let's enable this rule back when we shift to WinUI3 (v8.x). If we do it now, it would mean more than 400 file changes. dotnet_diagnostic.SA1629.severity = none dotnet_diagnostic.SA1633.severity = none dotnet_diagnostic.SA1634.severity = none dotnet_diagnostic.SA1652.severity = none # Additional Stylecop Analyzers dotnet_diagnostic.SA1111.severity = none dotnet_diagnostic.SA1121.severity = none dotnet_diagnostic.SA1204.severity = none dotnet_diagnostic.SA1208.severity = none dotnet_diagnostic.CS1591.severity = none # Missing XML comment for publicly visible type or member # 15000+ warnings in the solution dotnet_diagnostic.CA1510.severity = none # Use ArgumentNullException throw helper # doesn't work with older versions of .NET dotnet_diagnostic.SA1518.severity = none dotnet_diagnostic.SA1615.severity = none dotnet_diagnostic.SA1502.severity = none dotnet_diagnostic.SA1010.severity = none # Opening square brackets should not be preceded by a space # conflicts with collection expressions and IDE0028 # Suppress some ValueConverter warnings dotnet_diagnostic.WPF0073.severity = none # Add ValueConversion attribute (unknown types) dotnet_diagnostic.WPF0071.severity = none # Add ValueConversion attribute dotnet_diagnostic.WPF0070.severity = none # Add default field to converter # Suppress some IDE warnings dotnet_diagnostic.IDE0130.severity = none # Hide warnings about namespaces not matching folder structure dotnet_diagnostic.IDE0290.severity = none # Use primary constructor ================================================ FILE: .gitattributes ================================================ # Set default behavior to automatically normalize line endings. * text=auto *.doc binary *.DOC binary *.docx binary *.DOCX binary *.dot binary *.DOT binary *.pdf binary *.PDF binary *.rtf binary *.RTF binary *.jpg binary *.png binary *.gif binary # Force bash scripts to always use lf line endings so that if a repo is accessed # in Unix via a file share from Windows, the scripts will work. *.in text eol=lf *.sh text eol=lf # Likewise, force cmd and batch scripts to always use crlf *.cmd text eol=crlf *.bat text eol=crlf *.cs text=auto diff=csharp *.vb text=auto *.resx text=auto *.c text=auto *.cpp text=auto *.cxx text=auto *.h text=auto *.hxx text=auto *.py text=auto *.rb text=auto *.java text=auto *.html text=auto *.htm text=auto *.css text=auto *.scss text=auto *.sass text=auto *.less text=auto *.js text=auto *.lisp text=auto *.clj text=auto *.sql text=auto *.php text=auto *.lua text=auto *.m text=auto *.asm text=auto *.erl text=auto *.fs text=auto *.fsx text=auto *.hs text=auto *.csproj text=auto *.vbproj text=auto *.fsproj text=auto *.dbproj text=auto *.sln text=auto eol=crlf # Set linguist language for .h files explicitly based on # https://github.com/github/linguist/issues/1626#issuecomment-401442069 # this only affects the repo's language statistics *.h linguist-language=C ================================================ FILE: .github/FUNDING.yml ================================================ github: [pomianowski] ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yaml ================================================ name: Bug report description: Create a report to help us improve title: "Bug title" labels: [bug] body: - type: textarea validations: required: true attributes: label: Describe the bug description: A clear and concise description of what the bug is - type: textarea validations: required: true attributes: label: To Reproduce description: Steps to reproduce the behavior - type: textarea validations: required: true attributes: label: Expected behavior description: A clear and concise description of what you expected to happen - type: textarea attributes: label: Screenshots description: If applicable, add screenshots to help explain your problem - type: textarea validations: required: true attributes: label: OS version description: Which OS versions did you see the issue on? - type: textarea validations: required: true attributes: label: .NET version description: Which .NET versions did you see the issue on? - type: textarea validations: required: true attributes: label: WPF-UI NuGet version description: Which WPF-UI NuGet versions did you see the issue on? - type: textarea attributes: label: Additional context description: Add any other context about the problem here ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Documentation url: https://wpfui.lepo.co/documentation/ about: Find out how WPF UI works. - name: Tutorial url: https://wpfui.lepo.co/documentation/tutorial about: Having trouble with the basics? Check out the tutorial! - name: lepo.co contact url: https://lepo.co/contact about: Do you want to establish business contact? Let us know. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.yaml ================================================ name: Feature request description: Suggest an idea for the wpfui title: "Feature request title" labels: [enhancement] body: - type: textarea validations: required: true attributes: label: Is your feature request related to a problem? Please describe description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - type: textarea validations: required: true attributes: label: Describe the solution you'd like description: A clear and concise description of what you want to happen - type: textarea attributes: label: Describe alternatives you've considered description: A clear and concise description of any alternative solutions or features you've considered - type: textarea attributes: label: Additional context description: Add any other context or screenshots about the feature request here ================================================ FILE: .github/chatmodes/documentation_contributor.chatmode.md ================================================ --- description: 'WPF-UI Documentation Contributor for writing technical documentation in /docs/documentation/ following DocFX conventions and WPF UI patterns.' tools: ['edit', 'runNotebooks', 'search', 'new', 'runCommands', 'runTasks', 'microsoft.docs.mcp/*', 'youtube_transcript/*', 'GitKraken/*', 'context7/*', 'usages', 'vscodeAPI', 'problems', 'changes', 'testFailure', 'openSimpleBrowser', 'fetch', 'githubRepo', 'extensions', 'todos', 'runTests'] --- You are a technical documentation specialist for WPF-UI library. Write clear, actionable documentation for developers integrating WPF UI controls into their applications. Target audience: .NET/WPF developers implementing Fluent UI controls Location: /docs/documentation/*.md Build tool: DocFX (https://dotnet.github.io/docfx/) Format: Markdown with YAML frontmatter when needed Quality standards: - Concise and direct - no redundant text, humor, or pleasantries - Code examples must be complete and functional - XAML snippets must include proper namespaces - No assumptions about developer knowledge - verify with code search Standard article structure (analyze existing docs in /docs/documentation/): 1. Brief description (1-2 sentences) 2. Working code example (XAML + C# when applicable) 3. Additional examples for common scenarios 4. Notes/warnings for edge cases or platform-specific behavior Do NOT include: - "Introduction" or "Overview" headers - Redundant explanations of what code does - Generic WPF concepts already in Microsoft docs - Navigation instructions ("see below", "as shown above") XAML namespace declaration: xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" Code examples must: - Show complete, runnable snippets (not fragments with "...") - Use realistic property values - Include necessary using statements for C# - Follow WPF UI naming patterns (check src/Wpf.Ui/ for actual class names) Example format: ```xml ``` ```csharp using Wpf.Ui.Appearance; ApplicationThemeManager.Apply( ApplicationTheme.Dark, WindowBackdropType.Mica, true ); ``` Before writing documentation: 1. Search codebase (src/Wpf.Ui/) to verify class/property names exist 2. Check Directory.Packages.props for dependency requirements 3. Review existing docs in /docs/documentation/ for style consistency 4. Use microsoft_docs_search for WPF/.NET concepts when needed 5. Use Context7 for WPF-specific APIs if unsure When documenting controls: 1. Find the control in src/Wpf.Ui/Controls/ 2. Check XML docs for parameters/properties 3. Search Gallery app (src/Wpf.Ui.Gallery/) for usage examples 4. Verify namespace and assembly location Direct and technical. Never use emoticons, exclamation marks, or conversational fillers. Examples: Wrong: "Now, let's explore how to use the NavigationView control! It's really powerful and will help you create amazing navigation experiences." Right: "NavigationView manages page navigation with menu items and footer items." Wrong: "You might want to consider using the Apply method if you need to change themes." Right: "Change themes with ApplicationThemeManager.Apply():" Wrong: "As you can see in the example above..." Right: [Just show the next example] Prohibited phrases: - "Let's", "Now", "Here's how", "Simply", "Just" - "You might want to", "Consider", "Feel free to" - Questions in headings ("How do I...?") - Personal pronouns in descriptions - Any emoji or emoticons When documenting features using Win32/Interop: - Note Windows version requirements - Reference specific APIs from src/Wpf.Ui/Win32/ or src/Wpf.Ui/Interop/ - Include fallback behavior for unsupported platforms Example: > **Note:** TitleBar snap layouts require Windows 11. On Windows 10, standard window controls are displayed. Use microsoft_docs_search and microsoft_docs_fetch: - Verify current .NET/WPF API documentation - Reference official Microsoft patterns - ONLY share verified Microsoft Learn URLs Use Context7 (resolve-library-id, get-library-docs): - Check WPF framework APIs when uncertain - Verify dependency package documentation - Understand CommunityToolkit.Mvvm patterns Use codebase search: - Find actual implementation before documenting - Locate usage examples in Gallery app - Verify property/method signatures DocFX supports enhanced markdown syntax beyond standard CommonMark. Use these features when they add value to documentation clarity. YAML Header (optional): --- title: Page Title description: Brief description for metadata uid: unique.identifier.for.xref --- Alerts (use for important information): > [!NOTE] > Information users should notice even when skimming. > [!TIP] > Optional information to help users be more successful. > [!IMPORTANT] > Essential information required for user success. > [!CAUTION] > Negative potential consequences of an action. > [!WARNING] > Dangerous certain consequences of an action. Code Snippet (link to external code files): [!code-csharp[](~/samples/Program.cs)] Code Snippet with Region: [!code-csharp[](~/samples/Program.cs#MyRegion)] Code Snippet with Line Range: [!code-csharp[](~/samples/Program.cs#L12-L16)] Code Snippet with Highlighted Lines: [!code-csharp[](~/samples/Program.cs?highlight=2,5-7,9-)] Include Markdown Files (for reusable content blocks): Inline: Text before [!INCLUDE [title](path/to/file.md)] and after. Block: [!INCLUDE [title](path/to/file.md)] Tabs (for platform/language-specific content): # [Windows](#tab/windows) Content for Windows... # [Linux](#tab/linux) Content for Linux... --- Dependent Tabs (sync across multiple tab groups): # [.NET](#tab/dotnet/windows) .NET content for Windows... # [.NET](#tab/dotnet/linux) .NET content for Linux... --- Mermaid Diagrams (flowcharts, sequence diagrams): ```mermaid flowchart LR A[Start] --> B{Decision} B -->|Yes| C[Result 1] B -->|No| D[Result 2] ``` Cross-references (link to API documentation): Use xref syntax in YAML uid field, then reference with standard markdown links. Code Snippet Best Practices: 1. Place code samples in /samples/ directory (excluded from build) 2. Use #region tags in source files for partial includes 3. Highlight only relevant lines to focus attention 4. Prefer external files over inline code for examples >20 lines Documentation development is iterative. Gather context first, then refine through questions. Initial Assessment: 1. What is being documented? (control, feature, workflow, concept) 2. Who is the target user? (beginner, intermediate, advanced) 3. What problem does this solve? 4. What existing documentation exists on related topics? Ask Clarifying Questions When: - Control usage is ambiguous or has multiple scenarios - Platform requirements unclear (Windows version, .NET framework) - Dependencies or prerequisites not obvious from codebase - Breaking changes or migration concerns - Performance implications or best practices needed Example questions to ask: - "Should this cover MVVM integration or just basic XAML usage?" - "Are there Windows 11-specific features to document separately?" - "Is this replacing deprecated functionality? Should I note migration steps?" - "Should I document thread safety or async considerations?" Iterative Refinement: 1. Present initial draft with core examples 2. Ask: "Does this cover the primary use case, or should I expand on [specific scenario]?" 3. Incorporate feedback and refine 4. Verify technical accuracy by cross-referencing implementation 5. Request final review of code examples Breadth vs Depth Strategy: - Start broad: Cover the most common 80% use case first - Add depth: Expand with edge cases, advanced scenarios, and troubleshooting - Link out: Reference related docs rather than duplicating content - Iterate: Ask if additional sections are needed before writing them Documentation Review Questions: - "I've covered basic usage and theming. Should I add sections on custom styling or performance optimization?" - "The current draft focuses on XAML. Do you need C# code-behind examples?" - "Should this include migration steps from WinUI 3 or other UI frameworks?" When creating documentation: 1. Search codebase to understand implementation and API surface 2. Identify primary use case and target audience 3. Draft core content with minimal but complete examples 4. Ask clarifying questions about scope and depth 5. Iterate based on feedback 6. Verify all code examples execute correctly 7. Cross-reference with existing documentation for consistency When updating documentation: 1. Identify what changed in the codebase 2. Preserve existing structure and style 3. Update only affected sections 4. Ask if scope should expand to cover related changes 5. Verify changes against current codebase Delivery Format: - No preamble - deliver documentation directly - Ask questions AFTER presenting initial draft when scope is unclear - Present options: "I can expand this with [A, B, C]. Which would be most valuable?" - Iterate quickly based on feedback ================================================ FILE: .github/copilot-instructions.md ================================================ You are an AI coding agent helping build WPF-UI, a modern WPF library implementing Microsoft Fluent UI design. This is an open-source library used by thousands of developers. Focus on the Wpf.Ui library itself, not the Gallery demo application. Core library location: src/Wpf.Ui/ - Controls/ - NavigationView, TitleBar, FluentWindow, Button, Card, etc. - Appearance/ - ApplicationThemeManager, ApplicationAccentColorManager - Win32/ and Interop/ - Native Windows API wrappers - Services - NavigationService, SnackbarService, ContentDialogService, TaskBarService Multi-targeting: netstandard2.0/2.1, net462/472, net6.0/8.0/9.0 (see Directory.Build.props) Central Package Management: Directory.Packages.props - NEVER add package versions to .csproj files Build library: dotnet build src/Wpf.Ui/Wpf.Ui.csproj Solution filters: - Wpf.Ui.Library.slnf - Library projects only - Wpf.Ui.Gallery.slnf - Gallery demo app Testing: - XUnit v3 for unit tests (tests/Wpf.Ui.UnitTests/) - AwesomeAssertions for assertions (FluentAssertions successor) - FlaUI for UI automation (tests/Wpf.Ui.Gallery.IntegrationTests/) - NSubstitute for mocking NEVER assume library availability - always check Directory.Packages.props or .csproj first before using any external types. Modern C# (C# 13, LangVersion in Directory.Build.props): - Nullable reference types enabled - File-scoped namespaces - Target-typed new expressions - Pattern matching over type checks Comments: - Public APIs: REQUIRED XML docs with and showing XAML usage - Internal code: Avoid comments unless explaining Win32 interop/marshalling - Never add comments that restate what code does Example: /// /// Creates a hyperlink to web pages, files, email addresses, locations in the same page, or anything else a URL can address. /// /// /// /// <ui:Anchor NavigateUri="https://lepo.co/" /> /// /// public class Anchor : HyperlinkButton { } This codebase heavily uses P/Invoke, marshalling, and Windows APIs. When working with TitleBar, window management (HWND, WndProc), system theme detection, or native controls - always search the codebase first or use Context7/Microsoft Docs. Do not assume standard WPF approaches work. Key interop areas: - src/Wpf.Ui/Win32/ - Native methods, structs, enums - src/Wpf.Ui/Interop/ - Managed wrappers - src/Wpf.Ui/Controls/TitleBar/ - Snap layouts, DWM integration - src/Wpf.Ui/Appearance/ - System theme detection IMPORTANT: Never use emoticons or write excessive comments explaining what you are doing. IMPORTANT: You should minimize output tokens as much as possible while maintaining helpfulness, quality, and accuracy. Only address the specific query or task at hand, avoiding tangential information unless absolutely critical for completing the request. If you can answer in 1-3 sentences or a short paragraph, please do. IMPORTANT: You should NOT answer with unnecessary preamble or postamble (such as explaining your code or summarizing your action), unless the user asks you to. Answer the user's question directly, without elaboration, explanation, or details. One word answers are best. Avoid introductions, conclusions, and explanations. The section below describes things you can do Provide resources: Share relevant documentation, tutorials, or tools that can help the user deepen their understanding. If the `microsoft_docs_search` and `microsoft_docs_fetch` tools are available, use them to verify and find the most current Microsoft documentation and ONLY share links that have been verified through these tools. If these tools are not available, provide general guidance about concepts and topics but DO NOT share specific links or URLs to avoid potential hallucination - instead, suggest that the user might want to install the Microsoft Learn MCP server from https://github.com/microsoftdocs/mcp for enhanced documentation search capabilities with verified links. When writing code, follow the best practices described below. Use modern C# syntax for .NET 10. When in doubt, use Context7 (`resolve-library-id` and `get-library-docs`) and Microsoft Docs (`microsoft_docs_search` and `microsoft_docs_fetch`). You can also use other MCP tools to find answers, e.g., search code with `search` or repository with `githubRepo`. Working with Windows and WPF is complicated and requires knowledge of how the Windows operating system works, as well as details about Win32, marshalling, and other complexities. Always assume that you have incomplete information and that it is worth using Context7, Microsoft Docs, or searching the repository. Remember to add summary docs with examples to each public class. Thousands of people use the framework and need proper instructions. ```csharp /// /// Creates a hyperlink to web pages, files, email addresses, locations in the same page, or anything else a URL can address. /// /// /// /// <ui:Anchor /// NavigateUri="https://lepo.co/" /> /// /// public class Anchor : Wpf.Ui.Controls.HyperlinkButton; ``` When creating a sample page in WPF, use MVVM from the Community Toolkit. Divide classes into models, view models, and views, as shown below: ```csharp public partial class AnchorViewModel : ViewModel { [ObservableProperty] private bool _isAnchorEnabled = true; [RelayCommand] private void OnAnchorCheckboxChecked(object sender) { if (sender is not CheckBox checkbox) { return; } IsAnchorEnabled = !(checkbox?.IsChecked ?? false); } } [GalleryPage("Button which opens a link.", SymbolRegular.CubeLink20)] public partial class AnchorPage : INavigableView { public AnchorViewModel ViewModel { get; init; } public AnchorPage(AnchorViewModel viewModel) { ViewModel = viewModel; DataContext = this; InitializeComponent(); } } ``` ```xaml ``` We strive to write code that can be tested. To do this, we use XUnit v3, AwesomeAssertions (formerly FluentAssertions) and FlaUI. When we write unit tests, we write them as shown below. ```csharp public sealed class TransitionAnimationProviderTests { [Fact] public void ApplyTransition_ReturnsFalse_WhenDurationIsLessThan10() { UIElement mockedUiElement = Substitute.For(); var result = TransitionAnimationProvider.ApplyTransition(mockedUiElement, Transition.FadeIn, -10); result.Should().BeFalse(); } } ``` When we write integration tests, we write them as shown below. ```csharp public sealed class TitleBarTests : UiTest { [Fact] public async Task CloseButton_ShouldCloseWindow_WhenClicked() { Button? closeButton = FindFirst("TitleBarCloseButton").AsButton(); closeButton.Should().NotBeNull("because CloseButton should be present in the main window title bar"); closeButton.Click(moveMouse: false); await Wait(2); Application ?.HasExited.Should() .BeTrue("because the main window should be closed after clicking the close button"); } } ``` ================================================ FILE: .github/dependabot.yml ================================================ # To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates version: 2 updates: # Maintain dependencies for GitHub Actions - package-ecosystem: "github-actions" target-branch: "development" directory: "/" schedule: interval: "daily" labels: - "Actions" # Maintain dependencies for nuget - package-ecosystem: "nuget" target-branch: "development" directory: "src" schedule: interval: "daily" labels: - "NuGet" ================================================ FILE: .github/labeler.yml ================================================ release: - base-branch: 'main' PR: - base-branch: [ 'main', 'development' ] github_actions: - changed-files: - any-glob-to-any-file: '.github/workflows/**' documentation: - changed-files: - any-glob-to-any-file: 'docs/**' dotnet: - changed-files: - any-glob-to-any-file: '**/*.cs' update: - changed-files: - any-glob-to-any-file: 'src/Directory.Build.props' NuGet: - changed-files: - any-glob-to-any-file: 'src/Directory.Packages.props' dependencies: - changed-files: - any-glob-to-any-file: [ 'src/Directory.Packages.props', 'branding/package.json' ] styles: - changed-files: - any-glob-to-any-file: 'src/Wpf.Ui/**/*.xaml' themes: - changed-files: - any-glob-to-any-file: 'src/Wpf.Ui/Appearance/**' titlebar: - changed-files: - any-glob-to-any-file: 'src/Wpf.Ui/Controls/TitleBar/**' tray: - changed-files: - any-glob-to-any-file: 'src/Wpf.Ui.Tray/**' controls: - changed-files: - any-glob-to-any-file: 'src/Wpf.Ui/Controls/**' navigation: - changed-files: - any-glob-to-any-file: 'src/Wpf.Ui/Controls/NavigationView/**' gallery: - changed-files: - any-glob-to-any-file: 'src/Wpf.Ui.Gallery/**' icons: - changed-files: - any-glob-to-any-file: [ 'src/Wpf.Ui/Resources/Fonts/**', 'src/Wpf.Ui/Controls/IconSource/*', 'src/Wpf.Ui/Controls/IconElement/*' ] ================================================ FILE: .github/labels.yml ================================================ - name: "icons" color: "86CBEC" description: "Fonts and icons updates" - name: "animations" color: "233C4F" description: "Topic is related to animations" - name: "bug" color: "d73a4a" description: "Something isn't working" - name: "controls" color: "26CB0A" description: "Changes to the appearance or logic of custom controls." - name: "dependencies" color: "0366d6" description: "Pull requests that update a dependency file" - name: "documentation" color: "0075ca" description: "Improvements or additions to documentation" - name: "duplicate" color: "cfd3d7" description: "This issue or pull request already exists" - name: "enhancement" color: "a2eeef" description: "New feature or request" - name: "github_actions" color: "000000" description: "Pull requests that update GitHub Actions code" - name: "good_first_issue" color: "7057ff" description: "Good for newcomers" - name: "help_wanted" color: "008672" description: "Extra attention is needed" - name: "invalid" color: "e4e669" description: "This doesn't seem right" - name: "more_info_needed" color: "B60205" description: "More information is needed to solve the problem." - name: "MVVM_DI" color: "536317" description: "Issues related to MVVM and Dependency Injection." - name: "navigation" color: "C2AAA3" description: "Changes to navigation related controls." - name: ".NET" color: "7121c6" description: "Pull requests that update .NET code." - name: "dotnet" color: "7121c6" description: "Pull requests that update .NET code." - name: "NuGet" color: "004880" description: "Update of the NuGet package." - name: "performance" color: "D93F0B" description: "Performance improvements." - name: "PR" color: "666666" description: "Pull request." - name: "question" color: "d876e3" description: "Further information is requested." - name: "styles" color: "bfd4f2" description: "Updates to the appearance of the controls." - name: "themes" color: "080AA0" description: "Updates to the appearance of the themes." - name: "update" color: "1D76DB" description: "Pull Request containing the update." - name: "wontfix" color: "ffffff" description: "This will not be worked on." ================================================ FILE: .github/policies/cla.yml ================================================ name: Contributor License Agreement Policy description: CLA policy file resource: repository configuration: cla: content: https://raw.githubusercontent.com/lepoco/.github/main/CLA/lepoco.yml minimalChangeRequired: files: 1 codeLines: 1 bypassUsers: - azclibot - azure-pipelines[bot] - azure-pipelines-bot - azure-powershell-bot - azuresdkciprbot - dependabot[bot] - dependabot-preview[bot] - dotnet-bot - dotnet-corert-bot - dotnet-docker-bot - dotnet-maestro[bot] - dotnet-maestro-bot - dotnet-winget-bot ================================================ FILE: .github/policies/platformcontext.yml ================================================ name: platform_context description: The context for GitOps platform, this will drive GitOps specific policies owner: resource: repository where: configuration: platformContext: active: true onFailure: onSuccess: ================================================ FILE: .github/pull_request_template.md ================================================ ## Pull request type Please check the type of change your PR introduces: - [ ] Update - [ ] Bugfix - [ ] Feature - [ ] Code style update (formatting, renaming) - [ ] Refactoring (no functional changes, no api changes) - [ ] Build related changes - [ ] Documentation content changes ## What is the current behavior? Issue Number: N/A ## What is the new behavior? - - ## Other information ================================================ FILE: .github/workflows/top-issues-dashboard.yml ================================================ name: wpf-ui-top-issues-dashboard on: schedule: - cron: '0 0 */1 * *' jobs: ShowAndLabelTopIssues: name: Display and label top issues. runs-on: ubuntu-latest steps: - name: Top Issues action uses: rickstaa/top-issues-action@v1.3.101 env: github_token: ${{ secrets.GITHUB_TOKEN }} with: top_list_size: 10 label: true dashboard: true dashboard_show_total_reactions: true top_issues: true top_bugs: true top_features: true feature_label: feature top_pull_requests: true ================================================ FILE: .github/workflows/wpf-ui-cd-docs.yaml ================================================ name: wpf-ui-cd-docs on: push: branches: [main] workflow_dispatch: # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false jobs: publish: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Pages uses: actions/configure-pages@v5 - name: Use Node.js 18.x uses: actions/setup-node@v4 with: node-version: 18.x - name: Setup .NET Core SDK 10.x uses: actions/setup-dotnet@v4 with: dotnet-version: 10.x - name: Install docfx run: dotnet tool update -g docfx - name: Install dependencies run: dotnet restore - name: Install template dependencies run: npm ci working-directory: docs/templates - name: Build docfx template run: npm run build working-directory: docs/templates - name: docfx Build run: docfx docs/docfx.json - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: docs/_site/ - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 ================================================ FILE: .github/workflows/wpf-ui-cd-extension.yaml ================================================ name: wpf-ui-cd-extension on: push: branches: [main] paths: - 'src/Wpf.Ui.Extension**' workflow_dispatch: jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: microsoft/setup-msbuild@v2 with: msbuild-architecture: x64 - name: Setup .NET Core SDK 10.x uses: actions/setup-dotnet@v4 with: dotnet-version: 10.x - uses: nuget/setup-nuget@v2 with: nuget-api-key: ${{ secrets.NUGET_API_KEY }} - name: Restore dependencies run: nuget restore Wpf.Ui.sln - name: Build the solution run: msbuild src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj /t:Rebuild -p:Configuration=Release -p:RestorePackages=false -p:Platform="x64" -p:ProductArchitecture="amd64" -p:GITHUB_ACTIONS=True -p:LangVersion=8.0 - name: Build the solution run: msbuild src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj /t:Rebuild -p:Configuration=Release -p:RestorePackages=false -p:Platform="arm64" -p:ProductArchitecture="arm64" -p:GITHUB_ACTIONS=True -p:LangVersion=8.0 - uses: actions/upload-artifact@v4 with: name: wpf-ui-vs22-extension-x64 path: src\Wpf.Ui.Extension\bin\x64\Release\Wpf.Ui.Extension.vsix - uses: actions/upload-artifact@v4 with: name: wpf-ui-vs22-extension-arm64 path: src\Wpf.Ui.Extension\bin\arm64\Release\Wpf.Ui.Extension.vsix ================================================ FILE: .github/workflows/wpf-ui-cd-nuget.yaml ================================================ name: wpf-ui-cd-nuget on: push: branches: [main] paths: - 'Directory.Build.props' workflow_dispatch: jobs: deploy: runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: microsoft/setup-msbuild@v2 with: msbuild-architecture: x64 - uses: nuget/setup-nuget@v2 with: nuget-api-key: ${{ secrets.NUGET_API_KEY }} - name: Setup .NET Core SDK 10.x uses: actions/setup-dotnet@v4 with: dotnet-version: 10.x - name: Fetch the certificate run: | $signing_keys_payload = [System.Convert]::FromBase64String("${{ secrets.STRONG_NAME_KEY }}") $currentDirectory = Get-Location $certificatePath = Join-Path -Path $currentDirectory -ChildPath "src/lepo.snk" [IO.File]::WriteAllBytes("$certificatePath", $signing_keys_payload) - name: Install dependencies run: dotnet restore - name: Build run: dotnet build src\Wpf.Ui\Wpf.Ui.csproj --configuration Release --no-restore -p:SourceLinkEnabled=true - name: Build run: dotnet build src\Wpf.Ui.Abstractions\Wpf.Ui.Abstractions.csproj --configuration Release --no-restore -p:SourceLinkEnabled=true - name: Build run: dotnet build src\Wpf.Ui.DependencyInjection\Wpf.Ui.DependencyInjection.csproj --configuration Release --no-restore -p:SourceLinkEnabled=true - name: Build run: dotnet build src\Wpf.Ui.Tray\Wpf.Ui.Tray.csproj --configuration Release --no-restore -p:SourceLinkEnabled=true - name: Publish the package to NuGet.org continue-on-error: true run: nuget push **\*.nupkg -NonInteractive -SkipDuplicate -Source 'https://api.nuget.org/v3/index.json' - name: Publish the symbols to NuGet.org continue-on-error: true run: nuget push **\*.snupkg -NonInteractive -SkipDuplicate -Source 'https://api.nuget.org/v3/index.json' - name: Upload NuGet packages as artifacts uses: actions/upload-artifact@v4 with: name: nuget-packages path: '**\*.nupkg' ================================================ FILE: .github/workflows/wpf-ui-labeler.yml ================================================ name: wpf-ui-labeler on: - pull_request_target jobs: triage: permissions: contents: read pull-requests: write runs-on: ubuntu-latest steps: - uses: actions/labeler@v5 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" ================================================ FILE: .github/workflows/wpf-ui-lock.yml ================================================ name: wpf-ui-lock on: schedule: - cron: '0 0 * * 0' workflow_dispatch: permissions: issues: write pull-requests: write discussions: write concurrency: group: lock-threads jobs: action: runs-on: ubuntu-latest steps: - uses: dessant/lock-threads@v5 ================================================ FILE: .github/workflows/wpf-ui-pr-validator.yaml ================================================ name: wpf-ui-pr-validator on: pull_request: branches: [main] workflow_dispatch: jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v4 - uses: microsoft/setup-msbuild@v2 with: msbuild-architecture: x64 - uses: nuget/setup-nuget@v2 with: nuget-api-key: ${{ secrets.NUGET_API_KEY }} - name: Setup .NET Core SDK 10.x uses: actions/setup-dotnet@v4 with: dotnet-version: 10.x - name: Install dependencies run: dotnet restore - name: Build run: dotnet build src\Wpf.Ui.Gallery\Wpf.Ui.Gallery.csproj --configuration Release --no-restore ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # Strong Name Key files src/lepo.snk # DocFX docs/api/ # Desktop service store .DS_Store # User-specific files *.rsuser *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Visual Studio Code files .vscode # IntelliJ IDEA files .idea # Mono auto generated files mono_crash.* # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ [Aa][Rr][Mm]/ [Aa][Rr][Mm]64/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ [Ll]ogs/ # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # Visual Studio 2017 auto generated files Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUnit *.VisualState.xml TestResult.xml nunit-*.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ # .NET Core project.lock.json project.fragment.lock.json artifacts/ # StyleCop StyleCopReport.xml # Files built by Visual Studio *_i.c *_p.c *_h.h *.ilk *.meta *.obj *.iobj *.pch *.pdb *.ipdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *_wpftmp.csproj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # Visual Studio Trace Files *.e2e # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # AxoCover is a Code Coverage Tool .axoCover/* !.axoCover/settings.json # Visual Studio code coverage results *.coverage *.coveragexml # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # NuGet Symbol Packages *.snupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. !**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/[Pp]ackages/repositories.config # NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx *.appxbundle *.appxupload # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !?*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings orleans.codegen.cs # Including strong name files can present a security risk # (https://github.com/github/gitignore/pull/2483#issue-259490424) #*.snk # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm ServiceFabricBackup/ *.rptproj.bak # SQL Server files *.mdf *.ldf *.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings *.rptproj.rsuser *- [Bb]ackup.rdl *- [Bb]ackup ([0-9]).rdl *- [Bb]ackup ([0-9][0-9]).rdl # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat node_modules/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # CodeRush personal settings .cr/personal # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc # Cake - Uncomment if you are using it # tools/** # !tools/packages.config # Tabs Studio *.tss # Telerik's JustMock configuration file *.jmconfig # BizTalk build output *.btp.cs *.btm.cs *.odx.cs *.xsd.cs # OpenCover UI analysis results OpenCover/ # Azure Stream Analytics local run output ASALocalRun/ # MSBuild Binary and Structured Log *.binlog # NVidia Nsight GPU debugger configuration file *.nvuser # MFractors (Xamarin productivity tool) working folder .mfractor/ # Local History for Visual Studio .localhistory/ # BeatPulse healthcheck temp database healthchecksdb # Backup folder for Package Reference Convert tool in Visual Studio 2017 MigrationBackup/ # Ionide (cross platform F# VS Code tools) working folder .ionide/ ================================================ FILE: .vsconfig ================================================ { "version": "1.0", "components": [ "Microsoft.Component.ClickOnce", "Microsoft.Component.CodeAnalysis.SDK", "Microsoft.Component.MSBuild", "Microsoft.ComponentGroup.ClickOnce.Publish", "Microsoft.Net.Component.4.6.2.TargetingPack", "Microsoft.Net.Component.4.7.2.TargetingPack", "Microsoft.Net.Component.4.8.1.TargetingPack", "Microsoft.Net.ComponentGroup.DevelopmentPrerequisites", "Microsoft.Net.ComponentGroup.TargetingPacks.Common", "Microsoft.NetCore.Component.DevelopmentTools", "Microsoft.NetCore.Component.Runtime.6.0", "Microsoft.NetCore.Component.Runtime.7.0", "Microsoft.NetCore.Component.SDK", "Microsoft.VisualStudio.Component.ManagedDesktop.Core", "Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites", "Microsoft.VisualStudio.Component.NuGet", "Microsoft.VisualStudio.Component.PortableLibrary", "Microsoft.VisualStudio.Component.Roslyn.Compiler", "Microsoft.VisualStudio.Component.Roslyn.LanguageServices", "Microsoft.VisualStudio.Workload.ManagedDesktop" ] } ================================================ FILE: CNAME ================================================ wpfui.lepo.co ================================================ FILE: CODEOWNERS ================================================ # Lines starting with '#' are comments. # Each line is a file pattern followed by one or more owners. # These owners will be the default owners for everything in the repo, # and will automatically be added as reviewers to all pull requests. * @pomianowski ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at support@lepo.co. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations. ================================================ FILE: CONTRIBUTING.md ================================================ # Contribution Guidelines and as always, todo ## Prerequisites ## Code ### Code style ## Other general information ## Acknowledgement ================================================ FILE: Directory.Build.props ================================================ $(MSBuildThisFileDirectory) $(RepositoryDirectory)build\ 4.2.0 4.2.0 lepo.co lepo.co WPF-UI lepoco;toolkit;wpf;fluent;navigation;controls;design;icons;system;accent;theme;winui MIT true Copyright (C) 2021-2025 Leszek Pomianowski and WPF UI Contributors https://github.com/lepoco/wpfui https://github.com/lepoco/wpfui/releases Icon.png https://github.com/lepoco/wpfui/main/build/nuget.png main git true moderate true false true <_SilenceIsAotCompatibleUnsupportedWarning>true true true 14.0 enable $(NoWarn);CS8500 $(MSBuildProjectName.Contains('Test')) False True True true true $(TF_BUILD) $(DefineConstants);NET8_0_OR_GREATER README.md true false false $(NoWarn);CS8002;SA0001 true true $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb ================================================ FILE: Directory.Build.targets ================================================ true $(CommonTags);.NET $(CommonTags);$(PackageTags) $(CommonTags) true README.md true true snupkg true true all runtime; build; native; contentfiles; analyzers; buildtransitive all runtime; build; native; contentfiles; analyzers; buildtransitive all runtime; build; native; contentfiles; analyzers; buildtransitive all build; analyzers all build; analyzers all build; analyzers all build; analyzers all build; analyzers <_Parameter1>CommitHash <_Parameter2>$(SourceRevisionId) true true true true true $(RepositoryDirectory)\src\lepo.snk ================================================ FILE: Directory.Packages.props ================================================ ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2021-2025 Leszek Pomianowski and WPF UI Contributors. https://lepo.co/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: LICENSE.md ================================================ MIT License Copyright (c) 2021-2025 Leszek Pomianowski and WPF UI Contributors. https://lepo.co/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ![WPF UI Banner Dark](https://user-images.githubusercontent.com/13592821/174165081-9c62d188-ecb6-4200-abd8-419afbaf32c2.png#gh-dark-mode-only) ![WPF UI Banner Light](https://user-images.githubusercontent.com/13592821/174165388-921c4745-90ed-4396-9a4b-9c86478f7447.png#gh-light-mode-only) # WPF UI [Created with ❤ in Poland by Leszek Pomianowski](https://lepo.co/) and [wonderful open-source community](https://github.com/lepoco/wpfui/graphs/contributors). WPF UI provides the Fluent experience in your known and loved WPF framework. Intuitive design, themes, navigation and new immersive controls. All natively and effortlessly. Library changes the base elements like `Page`, `ToggleButton` or `List`, and also includes additional controls like `Navigation`, `NumberBox`, `Dialog` or `Snackbar`. [![Discord](https://img.shields.io/discord/1071051348348514375?label=discord)](https://discord.gg/AR9ywDUwGq) [![GitHub license](https://img.shields.io/github/license/lepoco/wpfui)](https://github.com/lepoco/wpfui/blob/master/LICENSE) [![Nuget](https://img.shields.io/nuget/v/WPF-UI)](https://www.nuget.org/packages/WPF-UI/) [![Nuget](https://img.shields.io/nuget/dt/WPF-UI?label=nuget)](https://www.nuget.org/packages/WPF-UI/) **Deliver humanitarian aid directly to Ukraine** ![ua](https://user-images.githubusercontent.com/13592821/184498735-d296feb8-0f9b-45df-bc0d-b7f0b6f580ed.png) ## 🛟 Support plans To ensure you receive the expert guidance you need, we offer a variety of support plans designed to meet the diverse needs of our community. Whether you are looking to modernize your WPF applications or need assistance with our other libraries, our tailored support solutions are here to help. From priority email support to 24/7 dedicated assistance, we provide flexible plans to suit your project requirements. [Take a look at the lepo.co support plans](https://lepo.co/support) ## 🤝 Help us keep working on this project Support the development of WPF UI and other innovative projects by becoming a sponsor on GitHub! Your monthly or one-time contributions help us continue to deliver high-quality, open-source solutions that empower developers worldwide. [Sponsor WPF UI on GitHub](https://github.com/sponsors/lepoco) ## 🚀 Getting started For a starter guide see our [documentation](https://wpfui.lepo.co/documentation/). **WPF UI Gallery** is a free application available in the _Microsoft Store_, with which you can test all functionalities. ```powershell winget install 'WPF UI' ``` **WPF UI** is delivered via **NuGet** package manager. You can find the package here: **Visual Studio** The plugin for **Visual Studio 2022** let you easily create new projects using **WPF UI**. ## 📷 Screenshots ![Demo App Sample](https://user-images.githubusercontent.com/13592821/166259110-0fb98120-fe34-4e6d-ab92-9f72ad7113c3.png) ![Monaco Editor](https://user-images.githubusercontent.com/13592821/258610583-7d71f69d-45b3-4be6-bcb8-8cf6cd60a2ff.png) ![Store App Sample](https://user-images.githubusercontent.com/13592821/165918914-6948fb42-1ee1-4c36-870e-65bb8ffe3c8a.png) ## 🏗️ Works with Visual Studio Designer ![VS2022 Designer Preview](https://user-images.githubusercontent.com/13592821/165919228-0aa3a36c-fb37-4198-835e-53488845226c.png) ## ❤️ Custom Tray icon and menu in pure WPF ![WPF UI Tray menu in WPF](https://user-images.githubusercontent.com/13592821/166259470-2d48a88e-47ce-4f8f-8f07-c9b110de64a5.png) ## ⚓ Custom Windows 11 SnapLayout available for TitleBar ![WPF UI Snap Layout for WPF](https://user-images.githubusercontent.com/13592821/166259869-e60d37e4-ded4-46bf-80d9-f92c47266f34.png) ## 📖 Documentation Documentation can be found at . We also have a [tutorial](#-getting-started) over there for newcomers. ## 🚧 Development If you want to propose a new functionality or submit a bugfix, create a [Pull Request](https://github.com/lepoco/wpfui/compare/main...main) for the branch [main](https://github.com/lepoco/wpfui/tree/main). ## 📐 How to use? First, your application needs to load custom styles, add in the **MyApp\App.xaml** file: ```xml ``` If your application does not have **MyApp\App.xaml** file, use `ApplicationThemeManager.Apply(frameworkElement)` to apply/update the theme resource in the `frameworkElement`. ```C# public partial class MainWindow { public MainWindow() { InitializeComponent(); ApplicationThemeManager.Apply(this); } } ``` Now you can create fantastic apps, e.g. with one button: ```xml ``` ## Microsoft Property Design of the interface, choice of colors and the appearance of the controls were inspired by projects made by Microsoft for Windows 11. The Wpf.Ui.Gallery app includes icons from _Microsoft WinUI 3 Gallery_ app. They are used here as an example of creating tools for Microsoft systems. ## Segoe Fluent Icons **WPF UI** uses Fluent System Icons. Although this font was also created by Microsoft, it does not contain all the icons for Windows 11. If you need the missing icons, add Segoe Fluent Icons to your application. According to the EULA of Segoe Fluent Icons we cannot ship a copy of it with this dll. Segoe Fluent Icons is installed by default on Windows 11, but if you want these icons in an application for Windows 10 and below, you must manually add the font to your application's resources. [https://docs.microsoft.com/en-us/windows/apps/design/style/segoe-fluent-icons-font](https://docs.microsoft.com/en-us/windows/apps/design/style/segoe-fluent-icons-font) [https://docs.microsoft.com/en-us/windows/apps/design/downloads/#fonts](https://docs.microsoft.com/en-us/windows/apps/design/downloads/#fonts) In the app dictionaries, you can add an alternate path to the font ```XML pack://application:,,,/;component/Fonts/#Segoe Fluent Icons ``` ## Code of Conduct This project has adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community. ## License **WPF UI** is free and open source software licensed under **MIT License**. You can use it in private and commercial projects. Keep in mind that you must include a copy of the license in your project. ================================================ FILE: SECURITY.md ================================================ # Security Policy ## Supported Versions At the moment, the only supported version of the **WPF UI** is the newest one. You can find it on _NuGet_. https://www.nuget.org/packages/wpf-ui/ ## Reporting a Vulnerability Security issues and bugs should be reported privately, by emailing support (at) lepo.co lepo.co does not offer Bug Bounty for the **WPF UI** library. Please do not open issues for anything you think might have a security implication. ================================================ FILE: Settings.XamlStyler ================================================ { "AttributesTolerance": 2, "KeepFirstAttributeOnSameLine": false, "MaxAttributeCharactersPerLine": 0, "MaxAttributesPerLine": 1, "NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransform, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter", "SeparateByGroups": false, "AttributeIndentation": 0, "AttributeIndentationStyle": 1, "RemoveDesignTimeReferences": false, "IgnoreDesignTimeReferencePrefix": false, "EnableAttributeReordering": true, "AttributeOrderingRuleGroups": [ "x:Class", "xmlns, xmlns:x", "xmlns:*", "x:Key, Key, x:Name, Name, x:Uid, Uid, Title", "Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom", "Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight", "Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex", "*:*, *", "PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint", "mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText", "Storyboard.*, From, To, Duration" ], "FirstLineAttributes": "", "OrderAttributesByName": true, "PutEndingBracketOnNewLine": false, "RemoveEndingTagOfEmptyElement": true, "SpaceBeforeClosingSlash": true, "RootElementLineBreakRule": 0, "ReorderVSM": 2, "ReorderGridChildren": false, "ReorderCanvasChildren": false, "ReorderSetters": 0, "FormatMarkupExtension": true, "NoNewLineMarkupExtensions": "x:Bind, Binding", "ThicknessSeparator": 2, "ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin", "FormatOnSave": true, "CommentPadding": 2, "IndentSize": 4, "IndentWithTabs": false } ================================================ FILE: ThirdPartyNotices.txt ================================================ WPF-UI THIRD-PARTY SOFTWARE NOTICES AND INFORMATION Do Not Translate or Localize This project incorporates components from the projects listed below. The original copyright notices and the licenses under which the authors received such components are set forth below. 1. sbaeumlisberger/VirtualizingWrapPanel version 2.0.6 (https://github.com/sbaeumlisberger/VirtualizingWrapPanel), included in Wpf.Ui. 2. microsoft/fluentui-system-icons version 1.1.242 (https://github.com/microsoft/fluentui-system-icons), included in Wpf.Ui. 3. dotnet/wpf version 8.0 (https://github.com/dotnet/wpf), included in Wpf.Ui. 4. microsoft/microsoft-ui-xaml version 3.0 (https://github.com/microsoft/microsoft-ui-xaml), included in Wpf.Ui. 5. microsoft/segoe-fluent-icons-font version 3.0 (https://learn.microsoft.com/en-us/windows/apps/design/style/segoe-fluent-icons-font), included in Wpf.Ui. %% sbaeumlisberger/VirtualizingWrapPanel NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License Copyright (c) 2019 S. Bäumlisberger Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF sbaeumlisberger/VirtualizingWrapPanel NOTICES AND INFORMATION %% microsoft/fluentui-system-icons NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License Copyright (c) 2020 Microsoft Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF microsoft/fluentui-system-icons NOTICES AND INFORMATION %% dotnet/wpf NOTICES AND INFORMATION BEGIN HERE ========================================= The MIT License (MIT) Copyright (c) .NET Foundation and Contributors All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF dotnet/wpf NOTICES AND INFORMATION %% microsoft/microsoft-ui-xaml NOTICES AND INFORMATION BEGIN HERE ========================================= MIT License Copyright (c) Microsoft Corporation. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE ========================================= END OF microsoft/microsoft-ui-xaml NOTICES AND INFORMATION %% microsoft/segoe-fluent-icons-font NOTICES AND INFORMATION BEGIN HERE ========================================= You may use the Segoe and icon fonts, or glyphs included in this file (“Software”) solely to design, develop and test your programs that run on a Microsoft Platform, a Microsoft Platform includes but is not limited to any hardware or software product or service branded by trademark, trade dress, copyright or some other recognized means, as a product or service of Microsoft. This license does not grant you the right to distribute or sublicense all or part of the Software to any third party. By using the Software, you agree to these terms. If you do not agree to these terms, do not use the Software. ========================================= END OF microsoft/segoe-fluent-icons-font NOTICES AND INFORMATION ================================================ FILE: Wpf.Ui.Gallery.slnf ================================================ { "solution": { "path": "Wpf.Ui.sln", "projects": [ "src\\Wpf.Ui.Gallery.Package\\Wpf.Ui.Gallery.Package.wapproj", "src\\Wpf.Ui.Gallery\\Wpf.Ui.Gallery.csproj", "src\\Wpf.Ui.SyntaxHighlight\\Wpf.Ui.SyntaxHighlight.csproj", "src\\Wpf.Ui.ToastNotifications\\Wpf.Ui.ToastNotifications.csproj", "src\\Wpf.Ui.Tray\\Wpf.Ui.Tray.csproj", "src\\Wpf.Ui\\Wpf.Ui.csproj" ] } } ================================================ FILE: Wpf.Ui.Library.slnf ================================================ { "solution": { "path": "Wpf.Ui.sln", "projects": [ "src\\Wpf.Ui.ToastNotifications\\Wpf.Ui.ToastNotifications.csproj", "src\\Wpf.Ui.Tray\\Wpf.Ui.Tray.csproj", "src\\Wpf.Ui\\Wpf.Ui.csproj" ] } } ================================================ FILE: Wpf.Ui.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 18 VisualStudioVersion = 18.0.11201.2 d18.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{21DB16AA-40BB-428B-AFE8-DEF4E3F0DC49}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig Directory.Build.props = Directory.Build.props Directory.Build.targets = Directory.Build.targets Directory.Packages.props = Directory.Packages.props LICENSE = LICENSE LICENSE.md = LICENSE.md nuget.config = nuget.config README.md = README.md Settings.XamlStyler = Settings.XamlStyler ThirdPartyNotices.txt = ThirdPartyNotices.txt EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Gallery", "src\Wpf.Ui.Gallery\Wpf.Ui.Gallery.csproj", "{E55BFB14-9DA6-434A-8153-BFE124D71818}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui", "src\Wpf.Ui\Wpf.Ui.csproj", "{1ADC87D1-8963-4100-845A-18477824718E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.FontMapper", "src\Wpf.Ui.FontMapper\Wpf.Ui.FontMapper.csproj", "{50BAB8DE-6558-4E77-87E5-CD533CBBB72F}" EndProject Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "Wpf.Ui.Gallery.Package", "src\Wpf.Ui.Gallery.Package\Wpf.Ui.Gallery.Package.wapproj", "{50C713C3-555E-491F-87EE-C806BEC0579F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.UnitTests", "tests\Wpf.Ui.UnitTests\Wpf.Ui.UnitTests.csproj", "{AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{35AC6218-CBEA-4FDA-8CE1-D1EBD6FD8D4A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Extension", "src\Wpf.Ui.Extension\Wpf.Ui.Extension.csproj", "{1298D974-9D81-4A93-9374-EA6A0E723DEB}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Extension.Template.Compact", "src\Wpf.Ui.Extension.Template.Compact\Wpf.Ui.Extension.Template.Compact.csproj", "{14D7431C-6CFF-4191-BB88-2B8D5F323A30}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Extension.Template.Blank", "src\Wpf.Ui.Extension.Template.Blank\Wpf.Ui.Extension.Template.Blank.csproj", "{AB3D44B5-9491-487E-A134-9AC5BED2B981}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Extension.Template.Fluent", "src\Wpf.Ui.Extension.Template.Fluent\Wpf.Ui.Extension.Template.Fluent.csproj", "{4D2706B5-27A9-4542-BD4D-8C22D12D0628}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.ToastNotifications", "src\Wpf.Ui.ToastNotifications\Wpf.Ui.ToastNotifications.csproj", "{3E84FE46-D3FD-4E8A-9208-95E315F16E1F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Tray", "src\Wpf.Ui.Tray\Wpf.Ui.Tray.csproj", "{073BF126-377B-49CD-838A-E8B779EB4862}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.SyntaxHighlight", "src\Wpf.Ui.SyntaxHighlight\Wpf.Ui.SyntaxHighlight.csproj", "{07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Abstractions", "src\Wpf.Ui.Abstractions\Wpf.Ui.Abstractions.csproj", "{F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{D7EA6A65-3CB5-4A59-934A-B8402C849107}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Demo.Console", "samples\Wpf.Ui.Demo.Console\Wpf.Ui.Demo.Console.csproj", "{6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Demo.Mvvm", "samples\Wpf.Ui.Demo.Mvvm\Wpf.Ui.Demo.Mvvm.csproj", "{5138077E-670E-413D-94D1-0825B6D1201B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Demo.Simple", "samples\Wpf.Ui.Demo.Simple\Wpf.Ui.Demo.Simple.csproj", "{E37CD05A-EBFC-429D-A550-BEE44119FA9E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wpf.Ui.Demo.Dialogs", "samples\Wpf.Ui.Demo.Dialogs\Wpf.Ui.Demo.Dialogs.csproj", "{7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.DependencyInjection", "src\Wpf.Ui.DependencyInjection\Wpf.Ui.DependencyInjection.csproj", "{9C8D6133-9417-43A1-B54F-725009569D71}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Demo.SetResources.Simple", "samples\Wpf.Ui.Demo.SetResources.Simple\Wpf.Ui.Demo.SetResources.Simple.csproj", "{3B424CF4-09F8-47D3-8420-53D7A1165B9C}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.Gallery.IntegrationTests", "tests\Wpf.Ui.Gallery.IntegrationTests\Wpf.Ui.Gallery.IntegrationTests.csproj", "{A396F1D6-55CF-493E-B541-A50B8F29395A}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wpf.Ui.FlaUI", "src\Wpf.Ui.FlaUI\Wpf.Ui.FlaUI.csproj", "{3E29F5F8-8310-45F4-A648-8F44F32B6472}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|arm64 = Debug|arm64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|arm64 = Release|arm64 Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|Any CPU.Build.0 = Debug|Any CPU {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|arm64.ActiveCfg = Debug|arm64 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|arm64.Build.0 = Debug|arm64 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|x64.ActiveCfg = Debug|x64 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|x64.Build.0 = Debug|x64 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|x86.ActiveCfg = Debug|x86 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Debug|x86.Build.0 = Debug|x86 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|Any CPU.ActiveCfg = Release|Any CPU {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|Any CPU.Build.0 = Release|Any CPU {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|arm64.ActiveCfg = Release|arm64 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|arm64.Build.0 = Release|arm64 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|x64.ActiveCfg = Release|x64 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|x64.Build.0 = Release|x64 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|x86.ActiveCfg = Release|x86 {E55BFB14-9DA6-434A-8153-BFE124D71818}.Release|x86.Build.0 = Release|x86 {1ADC87D1-8963-4100-845A-18477824718E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Debug|Any CPU.Build.0 = Debug|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Debug|arm64.ActiveCfg = Debug|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Debug|arm64.Build.0 = Debug|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Debug|x64.ActiveCfg = Debug|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Debug|x64.Build.0 = Debug|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Debug|x86.ActiveCfg = Debug|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Debug|x86.Build.0 = Debug|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Release|Any CPU.ActiveCfg = Release|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Release|Any CPU.Build.0 = Release|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Release|arm64.ActiveCfg = Release|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Release|arm64.Build.0 = Release|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Release|x64.ActiveCfg = Release|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Release|x64.Build.0 = Release|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Release|x86.ActiveCfg = Release|Any CPU {1ADC87D1-8963-4100-845A-18477824718E}.Release|x86.Build.0 = Release|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|Any CPU.Build.0 = Debug|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|arm64.ActiveCfg = Debug|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|arm64.Build.0 = Debug|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|x64.ActiveCfg = Debug|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|x64.Build.0 = Debug|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|x86.ActiveCfg = Debug|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Debug|x86.Build.0 = Debug|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|Any CPU.ActiveCfg = Release|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|Any CPU.Build.0 = Release|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|arm64.ActiveCfg = Release|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|arm64.Build.0 = Release|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|x64.ActiveCfg = Release|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|x64.Build.0 = Release|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|x86.ActiveCfg = Release|Any CPU {50BAB8DE-6558-4E77-87E5-CD533CBBB72F}.Release|x86.Build.0 = Release|Any CPU {50C713C3-555E-491F-87EE-C806BEC0579F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50C713C3-555E-491F-87EE-C806BEC0579F}.Debug|arm64.ActiveCfg = Debug|ARM64 {50C713C3-555E-491F-87EE-C806BEC0579F}.Debug|x64.ActiveCfg = Debug|x64 {50C713C3-555E-491F-87EE-C806BEC0579F}.Debug|x86.ActiveCfg = Debug|x86 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|Any CPU.ActiveCfg = Release|Any CPU {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|arm64.ActiveCfg = Release|ARM64 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|arm64.Build.0 = Release|ARM64 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|arm64.Deploy.0 = Release|ARM64 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x64.ActiveCfg = Release|x64 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x64.Build.0 = Release|x64 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x64.Deploy.0 = Release|x64 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x86.ActiveCfg = Release|x86 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x86.Build.0 = Release|x86 {50C713C3-555E-491F-87EE-C806BEC0579F}.Release|x86.Deploy.0 = Release|x86 {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|Any CPU.Build.0 = Debug|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|arm64.ActiveCfg = Debug|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|arm64.Build.0 = Debug|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|x64.ActiveCfg = Debug|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|x64.Build.0 = Debug|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|x86.ActiveCfg = Debug|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Debug|x86.Build.0 = Debug|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|Any CPU.ActiveCfg = Release|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|Any CPU.Build.0 = Release|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|arm64.ActiveCfg = Release|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|arm64.Build.0 = Release|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|x64.ActiveCfg = Release|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|x64.Build.0 = Release|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|x86.ActiveCfg = Release|Any CPU {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C}.Release|x86.Build.0 = Release|Any CPU {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Debug|arm64.ActiveCfg = Debug|arm64 {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Debug|x64.ActiveCfg = Debug|x64 {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Debug|x86.ActiveCfg = Debug|x86 {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|Any CPU.ActiveCfg = Release|Any CPU {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|Any CPU.Build.0 = Release|Any CPU {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|arm64.ActiveCfg = Release|arm64 {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|arm64.Build.0 = Release|arm64 {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|x64.ActiveCfg = Release|x64 {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|x64.Build.0 = Release|x64 {1298D974-9D81-4A93-9374-EA6A0E723DEB}.Release|x86.ActiveCfg = Release|x86 {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Debug|arm64.ActiveCfg = Debug|arm64 {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Debug|x64.ActiveCfg = Debug|x64 {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Debug|x86.ActiveCfg = Debug|x86 {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|Any CPU.ActiveCfg = Release|Any CPU {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|Any CPU.Build.0 = Release|Any CPU {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|arm64.ActiveCfg = Release|arm64 {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|arm64.Build.0 = Release|arm64 {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|x64.ActiveCfg = Release|x64 {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|x64.Build.0 = Release|x64 {14D7431C-6CFF-4191-BB88-2B8D5F323A30}.Release|x86.ActiveCfg = Release|x86 {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Debug|arm64.ActiveCfg = Debug|arm64 {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Debug|x64.ActiveCfg = Debug|x64 {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Debug|x86.ActiveCfg = Debug|x86 {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|Any CPU.ActiveCfg = Release|Any CPU {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|Any CPU.Build.0 = Release|Any CPU {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|arm64.ActiveCfg = Release|arm64 {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|arm64.Build.0 = Release|arm64 {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|x64.ActiveCfg = Release|x64 {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|x64.Build.0 = Release|x64 {AB3D44B5-9491-487E-A134-9AC5BED2B981}.Release|x86.ActiveCfg = Release|x86 {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Debug|arm64.ActiveCfg = Debug|arm64 {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Debug|x64.ActiveCfg = Debug|x64 {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Debug|x86.ActiveCfg = Debug|x86 {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|Any CPU.ActiveCfg = Release|Any CPU {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|Any CPU.Build.0 = Release|Any CPU {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|arm64.ActiveCfg = Release|arm64 {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|arm64.Build.0 = Release|arm64 {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|x64.ActiveCfg = Release|x64 {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|x64.Build.0 = Release|x64 {4D2706B5-27A9-4542-BD4D-8C22D12D0628}.Release|x86.ActiveCfg = Release|x86 {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|Any CPU.Build.0 = Debug|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|arm64.ActiveCfg = Debug|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|arm64.Build.0 = Debug|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|x64.ActiveCfg = Debug|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|x64.Build.0 = Debug|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|x86.ActiveCfg = Debug|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Debug|x86.Build.0 = Debug|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|Any CPU.Build.0 = Release|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|arm64.ActiveCfg = Release|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|arm64.Build.0 = Release|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|x64.ActiveCfg = Release|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|x64.Build.0 = Release|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|x86.ActiveCfg = Release|Any CPU {3E84FE46-D3FD-4E8A-9208-95E315F16E1F}.Release|x86.Build.0 = Release|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|Any CPU.Build.0 = Debug|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|arm64.ActiveCfg = Debug|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|arm64.Build.0 = Debug|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|x64.ActiveCfg = Debug|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|x64.Build.0 = Debug|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|x86.ActiveCfg = Debug|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Debug|x86.Build.0 = Debug|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Release|Any CPU.ActiveCfg = Release|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Release|Any CPU.Build.0 = Release|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Release|arm64.ActiveCfg = Release|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Release|arm64.Build.0 = Release|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Release|x64.ActiveCfg = Release|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Release|x64.Build.0 = Release|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Release|x86.ActiveCfg = Release|Any CPU {073BF126-377B-49CD-838A-E8B779EB4862}.Release|x86.Build.0 = Release|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|Any CPU.Build.0 = Debug|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|arm64.ActiveCfg = Debug|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|arm64.Build.0 = Debug|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|x64.ActiveCfg = Debug|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|x64.Build.0 = Debug|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|x86.ActiveCfg = Debug|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Debug|x86.Build.0 = Debug|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|Any CPU.ActiveCfg = Release|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|Any CPU.Build.0 = Release|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|arm64.ActiveCfg = Release|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|arm64.Build.0 = Release|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|x64.ActiveCfg = Release|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|x64.Build.0 = Release|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|x86.ActiveCfg = Release|Any CPU {07F7A65A-6061-4606-ACA2-F8D1A3D0E19A}.Release|x86.Build.0 = Release|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|Any CPU.Build.0 = Debug|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|arm64.ActiveCfg = Debug|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|arm64.Build.0 = Debug|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|x64.ActiveCfg = Debug|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|x64.Build.0 = Debug|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|x86.ActiveCfg = Debug|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Debug|x86.Build.0 = Debug|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|Any CPU.ActiveCfg = Release|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|Any CPU.Build.0 = Release|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|arm64.ActiveCfg = Release|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|arm64.Build.0 = Release|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|x64.ActiveCfg = Release|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|x64.Build.0 = Release|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|x86.ActiveCfg = Release|Any CPU {F3A0BD51-2B8C-4E75-A64B-0AED46A22F74}.Release|x86.Build.0 = Release|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|Any CPU.Build.0 = Debug|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|arm64.ActiveCfg = Debug|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|arm64.Build.0 = Debug|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|x64.ActiveCfg = Debug|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|x64.Build.0 = Debug|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|x86.ActiveCfg = Debug|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Debug|x86.Build.0 = Debug|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|Any CPU.ActiveCfg = Release|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|Any CPU.Build.0 = Release|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|arm64.ActiveCfg = Release|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|arm64.Build.0 = Release|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|x64.ActiveCfg = Release|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|x64.Build.0 = Release|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|x86.ActiveCfg = Release|Any CPU {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA}.Release|x86.Build.0 = Release|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|Any CPU.Build.0 = Debug|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|arm64.ActiveCfg = Debug|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|arm64.Build.0 = Debug|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|x64.ActiveCfg = Debug|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|x64.Build.0 = Debug|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|x86.ActiveCfg = Debug|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Debug|x86.Build.0 = Debug|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Release|Any CPU.ActiveCfg = Release|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Release|Any CPU.Build.0 = Release|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Release|arm64.ActiveCfg = Release|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Release|arm64.Build.0 = Release|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Release|x64.ActiveCfg = Release|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Release|x64.Build.0 = Release|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Release|x86.ActiveCfg = Release|Any CPU {5138077E-670E-413D-94D1-0825B6D1201B}.Release|x86.Build.0 = Release|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|Any CPU.Build.0 = Debug|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|arm64.ActiveCfg = Debug|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|arm64.Build.0 = Debug|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|x64.ActiveCfg = Debug|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|x64.Build.0 = Debug|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|x86.ActiveCfg = Debug|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Debug|x86.Build.0 = Debug|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|Any CPU.ActiveCfg = Release|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|Any CPU.Build.0 = Release|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|arm64.ActiveCfg = Release|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|arm64.Build.0 = Release|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|x64.ActiveCfg = Release|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|x64.Build.0 = Release|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|x86.ActiveCfg = Release|Any CPU {E37CD05A-EBFC-429D-A550-BEE44119FA9E}.Release|x86.Build.0 = Release|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|arm64.ActiveCfg = Debug|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|arm64.Build.0 = Debug|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|x64.ActiveCfg = Debug|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|x64.Build.0 = Debug|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|x86.ActiveCfg = Debug|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Debug|x86.Build.0 = Debug|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|Any CPU.Build.0 = Release|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|arm64.ActiveCfg = Release|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|arm64.Build.0 = Release|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|x64.ActiveCfg = Release|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|x64.Build.0 = Release|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|x86.ActiveCfg = Release|Any CPU {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4}.Release|x86.Build.0 = Release|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|arm64.ActiveCfg = Debug|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|arm64.Build.0 = Debug|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|x64.ActiveCfg = Debug|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|x64.Build.0 = Debug|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|x86.ActiveCfg = Debug|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Debug|x86.Build.0 = Debug|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Release|Any CPU.Build.0 = Release|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Release|arm64.ActiveCfg = Release|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Release|arm64.Build.0 = Release|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Release|x64.ActiveCfg = Release|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Release|x64.Build.0 = Release|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Release|x86.ActiveCfg = Release|Any CPU {9C8D6133-9417-43A1-B54F-725009569D71}.Release|x86.Build.0 = Release|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|arm64.ActiveCfg = Debug|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|arm64.Build.0 = Debug|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|x64.ActiveCfg = Debug|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|x64.Build.0 = Debug|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|x86.ActiveCfg = Debug|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Debug|x86.Build.0 = Debug|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|Any CPU.Build.0 = Release|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|arm64.ActiveCfg = Release|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|arm64.Build.0 = Release|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|x64.ActiveCfg = Release|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|x64.Build.0 = Release|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|x86.ActiveCfg = Release|Any CPU {3B424CF4-09F8-47D3-8420-53D7A1165B9C}.Release|x86.Build.0 = Release|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|Any CPU.Build.0 = Debug|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|arm64.ActiveCfg = Debug|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|arm64.Build.0 = Debug|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|x64.ActiveCfg = Debug|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|x64.Build.0 = Debug|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|x86.ActiveCfg = Debug|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Debug|x86.Build.0 = Debug|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|Any CPU.ActiveCfg = Release|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|Any CPU.Build.0 = Release|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|arm64.ActiveCfg = Release|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|arm64.Build.0 = Release|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|x64.ActiveCfg = Release|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|x64.Build.0 = Release|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|x86.ActiveCfg = Release|Any CPU {A396F1D6-55CF-493E-B541-A50B8F29395A}.Release|x86.Build.0 = Release|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|Any CPU.Build.0 = Debug|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|arm64.ActiveCfg = Debug|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|arm64.Build.0 = Debug|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|x64.ActiveCfg = Debug|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|x64.Build.0 = Debug|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|x86.ActiveCfg = Debug|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Debug|x86.Build.0 = Debug|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|Any CPU.ActiveCfg = Release|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|Any CPU.Build.0 = Release|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|arm64.ActiveCfg = Release|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|arm64.Build.0 = Release|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|x64.ActiveCfg = Release|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|x64.Build.0 = Release|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|x86.ActiveCfg = Release|Any CPU {3E29F5F8-8310-45F4-A648-8F44F32B6472}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {AE87BE68-DFDC-46D8-BC55-DC9D1DD47F4C} = {35AC6218-CBEA-4FDA-8CE1-D1EBD6FD8D4A} {6F1F6A8D-A530-4C4F-9360-219AC3B43FAA} = {D7EA6A65-3CB5-4A59-934A-B8402C849107} {5138077E-670E-413D-94D1-0825B6D1201B} = {D7EA6A65-3CB5-4A59-934A-B8402C849107} {E37CD05A-EBFC-429D-A550-BEE44119FA9E} = {D7EA6A65-3CB5-4A59-934A-B8402C849107} {7F6C7E7A-A4B5-4D12-88EB-217CA59284F4} = {D7EA6A65-3CB5-4A59-934A-B8402C849107} {3B424CF4-09F8-47D3-8420-53D7A1165B9C} = {D7EA6A65-3CB5-4A59-934A-B8402C849107} {A396F1D6-55CF-493E-B541-A50B8F29395A} = {35AC6218-CBEA-4FDA-8CE1-D1EBD6FD8D4A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {234CB3F9-5ADC-433F-BDBD-CB8EA59EB518} EndGlobalSection EndGlobal ================================================ FILE: build.cmd ================================================ @echo off powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0build.ps1"""" @REM powershell -ExecutionPolicy ByPass -NoProfile -command "& """%~dp0scripts\build_extension.ps1"""" exit /b %ErrorLevel% ================================================ FILE: build.ps1 ================================================ $wingetVersion = & winget --version 2>$null if ($wingetVersion -eq $null) { Write-Output "winget is not installed. Starting installation..." Invoke-WebRequest -Uri "https://github.com/microsoft/winget-cli/releases/download/v1.6.3482/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" -OutFile "$env:TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" Add-AppxPackage -Path "$env:TEMP\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle" Write-Output "winget has been installed." } $dotnetVersion = & dotnet --version 2>$null if ($dotnetVersion -eq $null) { Write-Output ".NET SDK is not installed." winget install Microsoft.DotNet.SDK.8 } else { $majorVersion = $dotnetVersion.Split('.')[0] if ($majorVersion -ge 8) { Write-Output ".NET SDK version is $dotnetVersion, which is 8.0.0 or newer." } else { Write-Output ".NET SDK version is $dotnetVersion, which is older than 8.0.0." winget install Microsoft.DotNet.SDK.8 } } if ($env:PROCESSOR_ARCHITECTURE -eq "AMD64") { dotnet restore Wpf.Ui.sln /tl dotnet build src\Wpf.Ui.Gallery\Wpf.Ui.Gallery.csproj --configuration Release --no-restore --verbosity quiet /tl } else { Write-Host "Not in the x64 desktop environment." } ================================================ FILE: docs/.gitignore ================================================ ############### # folder # ############### /**/DROP/ /**/TEMP/ /**/packages/ /**/bin/ /**/obj/ _site public /src/ ================================================ FILE: docs/codesnippet/Rtf/Hyperlink/RtfDocumentProcessor.cs ================================================ // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. namespace RtfDocumentProcessors { using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Composition; using System.IO; using System.Linq; using System.Web; using System.Xml.Linq; using Microsoft.DocAsCode.Plugins; using Microsoft.DocAsCode.Utility; [Export(typeof(IDocumentProcessor))] public class RtfDocumentProcessor : IDocumentProcessor { [ImportMany(nameof(RtfDocumentProcessor))] public IEnumerable BuildSteps { get; set; } public string Name => nameof(RtfDocumentProcessor); public ProcessingPriority GetProcessingPriority(FileAndType file) { if ( file.Type == DocumentType.Article && ".rtf".Equals(Path.GetExtension(file.File), StringComparison.OrdinalIgnoreCase) ) { return ProcessingPriority.Normal; } return ProcessingPriority.NotSupported; } public FileModel Load(FileAndType file, ImmutableDictionary metadata) { var content = new Dictionary { ["conceptual"] = File.ReadAllText(Path.Combine(file.BaseDir, file.File)), ["type"] = "Conceptual", ["path"] = file.File, }; return new FileModel(file, content); } #region Save public SaveResult Save(FileModel model) { HashSet linkToFiles = CollectLinksAndFixDocument(model); return new SaveResult { DocumentType = "Conceptual", ModelFile = model.File, LinkToFiles = linkToFiles.ToImmutableArray(), }; } #endregion #region CollectLinksAndFixDocument private static HashSet CollectLinksAndFixDocument(FileModel model) { string content = (string)((Dictionary)model.Content)["conceptual"]; var doc = XDocument.Parse(content); var links = from attr in doc.Descendants().Attributes() where "href".Equals(attr.Name.LocalName, StringComparison.OrdinalIgnoreCase) || "src".Equals(attr.Name.LocalName, StringComparison.OrdinalIgnoreCase) select attr; var path = (RelativePath)model.File; var linkToFiles = new HashSet(); foreach (var link in links) { FixLink(link, path, linkToFiles); } using (var sw = new StringWriter()) { doc.Save(sw); ((Dictionary)model.Content)["conceptual"] = sw.ToString(); } return linkToFiles; } #endregion #region FixLink private static void FixLink(XAttribute link, RelativePath filePath, HashSet linkToFiles) { string linkFile; string anchor = null; if (PathUtility.IsRelativePath(link.Value)) { var index = link.Value.IndexOf('#'); if (index == -1) { linkFile = link.Value; } else if (index == 0) { return; } else { linkFile = link.Value.Remove(index); anchor = link.Value.Substring(index); } var path = filePath + (RelativePath)linkFile; var file = (string)path.GetPathFromWorkingFolder(); link.Value = file + anchor; linkToFiles.Add(HttpUtility.UrlDecode(file)); } } #endregion public void UpdateHref(FileModel model, IDocumentBuildContext context) { } } } ================================================ FILE: docs/codesnippet/Rtf/RtfBuildStep.cs ================================================ // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. namespace RtfDocumentProcessors { using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Composition; using System.Threading.Tasks; using System.Threading.Tasks.Schedulers; using MarkupConverter; using Microsoft.DocAsCode.Plugins; [Export(nameof(RtfDocumentProcessor), typeof(IDocumentBuildStep))] public class RtfBuildStep : IDocumentBuildStep { #region Build private readonly TaskFactory _taskFactory = new TaskFactory(new StaTaskScheduler(1)); public void Build(FileModel model, IHostService host) { string content = (string)((Dictionary)model.Content)["conceptual"]; content = _taskFactory.StartNew(() => RtfToHtmlConverter.ConvertRtfToHtml(content)).Result; ((Dictionary)model.Content)["conceptual"] = content; } #endregion #region Others public int BuildOrder => 0; public string Name => nameof(RtfBuildStep); public void Postbuild(ImmutableList models, IHostService host) { } public IEnumerable Prebuild(ImmutableList models, IHostService host) { return models; } #endregion } } ================================================ FILE: docs/codesnippet/Rtf/RtfDocumentProcessor.cs ================================================ // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. namespace RtfDocumentProcessors { using System; using System.Collections.Generic; using System.Collections.Immutable; using System.Composition; using System.IO; using Microsoft.DocAsCode.Common; using Microsoft.DocAsCode.Plugins; [Export(typeof(IDocumentProcessor))] public class RtfDocumentProcessor : IDocumentProcessor { #region BuildSteps [ImportMany(nameof(RtfDocumentProcessor))] public IEnumerable BuildSteps { get; set; } #endregion #region Name public string Name => nameof(RtfDocumentProcessor); #endregion #region GetProcessingPriority public ProcessingPriority GetProcessingPriority(FileAndType file) { if ( file.Type == DocumentType.Article && ".rtf".Equals(Path.GetExtension(file.File), StringComparison.OrdinalIgnoreCase) ) { return ProcessingPriority.Normal; } return ProcessingPriority.NotSupported; } #endregion #region Load public FileModel Load(FileAndType file, ImmutableDictionary metadata) { var content = new Dictionary { ["conceptual"] = File.ReadAllText(Path.Combine(file.BaseDir, file.File)), ["type"] = "Conceptual", ["path"] = file.File, }; var localPathFromRoot = PathUtility.MakeRelativePath( EnvironmentContext.BaseDirectory, EnvironmentContext.FileAbstractLayer.GetPhysicalPath(file.File) ); return new FileModel(file, content) { LocalPathFromRoot = localPathFromRoot }; } #endregion #region Save public SaveResult Save(FileModel model) { return new SaveResult { DocumentType = "Conceptual", FileWithoutExtension = Path.ChangeExtension(model.File, null), }; } #endregion #region UpdateHref public void UpdateHref(FileModel model, IDocumentBuildContext context) { } #endregion } } ================================================ FILE: docs/docfx.json ================================================ { "metadata": [ { "src": [ { "files": [ "src/Wpf.Ui/*.csproj", "src/Wpf.Ui.Tray/*.csproj", "src/Wpf.Ui.Abstractions/*.csproj", "src/Wpf.Ui.DependencyInjection/*.csproj" ], "src": "../" } ], "dest": "api", "properties": { "TargetFramework": "net472" }, "disableGitFeatures": false, "disableDefaultFilter": false } ], "build": { "content": [ { "files": [ "**/*.{md,yml}" ], "exclude": [ "_site/**", "obj/**" ] } ], "resource": [ { "files": [ "**/images/**", "codesnippet/**", "manifest.webmanifest", "robots.txt" ], "exclude": [ "_site/**", "obj/**" ] } ], "xrefService": [ "https://xref.docs.microsoft.com/query?uid={uid}" ], "postProcessors": [ "ExtractSearchIndex" ], "globalMetadata": { "_appTitle": "WPF UI", "_appName": "WPF UI", "_appFaviconPath": "images/favicon.ico", "_appLogoPath": "images/wpfui.png", "_appFooter": "Made with docfx, ChatGPT and DeepL | Copyright © 2025 lepo.co" }, "dest": "_site", "template": [ "default", "templates/wpfui" ], "globalMetadataFiles": [], "fileMetadataFiles": [], "markdownEngineName": "markdig", "noLangKeyword": false, "keepFileLink": false, "cleanupCacheHistory": false, "disableGitFeatures": false }, "sitemap": { "baseUrl": "https://wpfui.lepo.co", "priority": 0.1, "changefreq": "monthly" } } ================================================ FILE: docs/documentation/.gitignore ================================================ ############### # temp file # ############### *.yml .manifest ================================================ FILE: docs/documentation/about-wpf.md ================================================ # What is WPF WPF (Windows Presentation Foundation) is a resolution-independent UI framework for building Windows desktop applications. It provides vector-based graphics, advanced layout, data binding, multimedia, animation, and extensive styling and templating capabilities. ## .NET Framework vs Modern .NET WPF has two implementations: **Modern .NET** (.NET 6+): Open-source implementation hosted on GitHub. Provides improved performance, new APIs, side-by-side deployment, and modern tooling. Despite .NET being cross-platform, WPF only runs on Windows. **.NET Framework 4**: Legacy Windows-only implementation. Maintained for compatibility with existing applications but receives minimal new features. New WPF applications should target modern .NET (.NET 6 or later) to benefit from: - Better performance and reduced memory usage - Regular updates and new features - Modern C# language versions - Improved debugging and diagnostics - Side-by-side deployment without machine-wide installations ================================================ FILE: docs/documentation/accent.md ================================================ # Accent Colors Accent colors provide visual emphasis and brand identity in WPF UI applications. The library manages accent color resources that automatically adapt to light and dark themes. > [!TIP] > Use `SystemThemeWatcher.Watch(this)` in your main window constructor to automatically sync accent colors with Windows personalization settings. ## Apply System Accent Use the system's personalization accent color: ```csharp using Wpf.Ui.Appearance; ApplicationAccentColorManager.ApplySystemAccent(); ``` ## Apply Theme with Accent Apply theme and accent together: ```csharp using Wpf.Ui.Appearance; using Wpf.Ui.Controls; ApplicationThemeManager.Apply( ApplicationTheme.Dark, WindowBackdropType.Mica, updateAccent: true // Automatically applies system accent ); ``` Available backdrop types: `None`, `Auto`, `Mica`, `Acrylic`, `Tabbed`. > [!IMPORTANT] > Always use `DynamicResource` (not `StaticResource`) for accent color bindings to receive runtime updates when accent changes. ## Apply Custom Accent Set a custom accent color: ```csharp ApplicationAccentColorManager.Apply( Color.FromArgb(0xFF, 0xEE, 0x00, 0xBB), ApplicationTheme.Dark ); ``` Retrieve the Windows colorization color programmatically: ```csharp Color colorizationColor = ApplicationAccentColorManager.GetColorizationColor(); ApplicationAccentColorManager.Apply(colorizationColor, ApplicationTheme.Dark); ``` ## Accent Color Resources WPF UI provides these accent color resources: ### System Accent Colors Base accent colors that update when you call `ApplicationAccentColorManager.Apply()`: - `SystemAccentColor` - Primary system accent - `SystemAccentColorPrimary` - Lighter/darker variant for light/dark themes - `SystemAccentColorSecondary` - More prominent variant (most commonly used) - `SystemAccentColorTertiary` - Strongest variant ```xml ``` > [!TIP] > `SystemAccentColorSecondary` is the most commonly used variant for interactive elements and provides optimal contrast in both light and dark themes. ### Accent Text Colors For text and interactive elements like links: - `AccentTextFillColorPrimaryBrush` - Primary accent text (rest/hover state) - `AccentTextFillColorSecondaryBrush` - Secondary accent text - `AccentTextFillColorTertiaryBrush` - Tertiary accent text (pressed state) - `AccentTextFillColorDisabledBrush` - Disabled accent text ```xml ``` ### Accent Fill Colors For button backgrounds and filled surfaces: - `AccentFillColorDefaultBrush` - Default accent fill - `AccentFillColorSecondaryBrush` - Secondary fill (90% opacity) - `AccentFillColorTertiaryBrush` - Tertiary fill (80% opacity) - `AccentFillColorDisabledBrush` - Disabled state fill ```xml