├── .editorconfig ├── .gitattributes ├── .github └── workflows │ └── dotnetcore.yml ├── .gitignore ├── .vscode ├── launch.json └── tasks.json ├── Docs ├── README.md └── ROADMAP.md ├── Icons ├── Icon.ico ├── Icon16.pdn ├── Icon16.png ├── Icon32.pdn ├── Icon32.png ├── Icon48.pdn └── Icon48.png ├── LICENSE.md ├── README.md ├── SolidShineUi.sln ├── SolidShineUi ├── ArithmeticParser.cs ├── AutoCompleteBehavior.cs ├── BindableChild.cs ├── BindableHighContrast.cs ├── BrushFactory.cs ├── CaptionType.cs ├── CheckBox.cs ├── ChromeButtons.xaml ├── ChromeButtons.xaml.cs ├── ClickSelectTextBox.cs ├── ColorPaletteFileReader.cs ├── ColorScheme.cs ├── ColorToBrushConverter.cs ├── ColorsHelper.cs ├── ContextMenu.cs ├── DialogImages │ ├── ErrorBlack.png │ ├── ErrorColor.png │ ├── ErrorWhite.png │ ├── HandBlack.png │ ├── HandColor.png │ ├── HandWhite.png │ ├── InfoBlack.png │ ├── InfoColor.png │ ├── InfoWhite.png │ ├── LockBlack.png │ ├── LockColor.png │ ├── LockWhite.png │ ├── QuestionBlack.png │ ├── QuestionColor.png │ ├── QuestionWhite.png │ ├── StopBlack.png │ ├── StopColor.png │ ├── StopWhite.png │ ├── WarningBlack.png │ ├── WarningColor.png │ ├── WarningWhite.png │ └── desktop.ini ├── Dialogs │ ├── ColorPickerDialog.xaml │ ├── ColorPickerDialog.xaml.cs │ ├── FontSelectDialog.xaml │ ├── FontSelectDialog.xaml.cs │ ├── MessageDialog.xaml │ ├── MessageDialog.xaml.cs │ ├── StringInputDialog.xaml │ └── StringInputDialog.xaml.cs ├── DoubleSpinner.cs ├── EnumComboBox.cs ├── FileSelect.cs ├── FlatButton.cs ├── FlatRepeatButton.cs ├── FlatWindow.cs ├── FlatWindowCommands.cs ├── FontWeightConverters.cs ├── GlobalSuppressions.cs ├── IClickSelectableControl.cs ├── ISelectableCollection.cs ├── Images │ ├── AddBlack.png │ ├── AddColor.png │ ├── AddWhite.png │ ├── DeleteBlack.png │ ├── DeleteColor.png │ ├── DeleteWhite.png │ ├── DownArrowBlack.png │ ├── DownArrowColor.png │ ├── DownArrowWhite.png │ ├── DownBlack.png │ ├── DownColor.png │ ├── DownLeftArrowBlack.png │ ├── DownLeftArrowColor.png │ ├── DownLeftArrowWhite.png │ ├── DownRightArrowBlack.png │ ├── DownRightArrowColor.png │ ├── DownRightArrowWhite.png │ ├── DownWhite.png │ ├── ExitBlack.png │ ├── ExitColor.png │ ├── ExitWhite.png │ ├── FontBlack.png │ ├── FontColor.png │ ├── FontWhite.png │ ├── FullFillBlack.png │ ├── FullFillColor.png │ ├── FullFillWhite.png │ ├── ImageBlack.png │ ├── ImageColor.png │ ├── ImageWhite.png │ ├── LeftArrowBlack.png │ ├── LeftArrowColor.png │ ├── LeftArrowWhite.png │ ├── LeftRightArrowBlack.png │ ├── LeftRightArrowColor.png │ ├── LeftRightArrowWhite.png │ ├── OpenBlack.png │ ├── OpenColor.png │ ├── OpenWhite.png │ ├── ReloadBlack.png │ ├── ReloadColor.png │ ├── ReloadWhite.png │ ├── RightArrowBlack.png │ ├── RightArrowColor.png │ ├── RightArrowWhite.png │ ├── SearchBlack.png │ ├── SearchColor.png │ ├── SearchImageBlack.png │ ├── SearchImageColor.png │ ├── SearchImageWhite.png │ ├── SearchWhite.png │ ├── SelectBlack.png │ ├── SelectColor.png │ ├── SelectWhite.png │ ├── SmallExitBlack.png │ ├── SmallExitColor.png │ ├── SmallExitWhite.png │ ├── StackBlack.png │ ├── StackColor.png │ ├── StackWhite.png │ ├── StringBlack.png │ ├── StringColor.png │ ├── StringWhite.png │ ├── TextBoldBlack.png │ ├── TextBoldColor.png │ ├── TextBoldWhite.png │ ├── TextItalicBlack.png │ ├── TextItalicColor.png │ ├── TextItalicWhite.png │ ├── ThreeDotsBlack.png │ ├── ThreeDotsColor.png │ ├── ThreeDotsWhite.png │ ├── TransferBlack.png │ ├── TransferColor.png │ ├── TransferWhite.png │ ├── UpArrowBlack.png │ ├── UpArrowColor.png │ ├── UpArrowWhite.png │ ├── UpBlack.png │ ├── UpColor.png │ ├── UpDownArrowBlack.png │ ├── UpDownArrowColor.png │ ├── UpDownArrowWhite.png │ ├── UpLeftArrowBlack.png │ ├── UpLeftArrowColor.png │ ├── UpLeftArrowWhite.png │ ├── UpRightArrowBlack.png │ ├── UpRightArrowColor.png │ ├── UpRightArrowWhite.png │ └── UpWhite.png ├── IntegerSpinner.cs ├── Keyboard │ ├── ActionKeyAction.cs │ ├── CommandKeyAction.cs │ ├── IKeyAction.cs │ ├── KeyRegistry.cs │ ├── KeyboardShortcutHandler.cs │ ├── KeyboardShortcuts.cs │ └── RoutedEventKeyAction.cs ├── LinkTextBlock.cs ├── LongSpinner.cs ├── Menu.cs ├── MenuButton.cs ├── MenuItem.cs ├── NativeMethods.cs ├── Properties │ └── launchSettings.json ├── PropertyList │ ├── Dialogs │ │ ├── CharInputDialog.xaml │ │ ├── CharInputDialog.xaml.cs │ │ ├── ImageBrushEditorDialog.xaml │ │ ├── ImageBrushEditorDialog.xaml.cs │ │ ├── LinearGradientEditorDialog.xaml │ │ ├── LinearGradientEditorDialog.xaml.cs │ │ ├── ListEditorDialog.xaml │ │ ├── ListEditorDialog.xaml.cs │ │ ├── RadialGradientEditorDialog.xaml │ │ ├── RadialGradientEditorDialog.xaml.cs │ │ ├── RectEditDialog.xaml │ │ ├── RectEditDialog.xaml.cs │ │ ├── TransformEditDialog.xaml │ │ └── TransformEditDialog.xaml.cs │ ├── IPropertyEditor.cs │ ├── IPropertyEditorHost.cs │ ├── ListEditorItem.xaml │ ├── ListEditorItem.xaml.cs │ ├── PropertyEditorItem.xaml │ ├── PropertyEditorItem.xaml.cs │ ├── PropertyEditors │ │ ├── BooleanEditor.xaml │ │ ├── BooleanEditor.xaml.cs │ │ ├── BrushEditor.xaml │ │ ├── BrushEditor.xaml.cs │ │ ├── CharEditor.xaml │ │ ├── CharEditor.xaml.cs │ │ ├── ColorEditor.xaml │ │ ├── ColorEditor.xaml.cs │ │ ├── CornerRadiusEditor.xaml │ │ ├── CornerRadiusEditor.xaml.cs │ │ ├── CursorEditor.xaml │ │ ├── CursorEditor.xaml.cs │ │ ├── DateTimeEditor.xaml │ │ ├── DateTimeEditor.xaml.cs │ │ ├── DecimalEditor.xaml │ │ ├── DecimalEditor.xaml.cs │ │ ├── DoubleEditor.xaml │ │ ├── DoubleEditor.xaml.cs │ │ ├── EnumEditor.xaml │ │ ├── EnumEditor.xaml.cs │ │ ├── EnumerableEditor.xaml │ │ ├── EnumerableEditor.xaml.cs │ │ ├── FontFamilyEditor.xaml │ │ ├── FontFamilyEditor.xaml.cs │ │ ├── FontStyleEditor.xaml │ │ ├── FontStyleEditor.xaml.cs │ │ ├── FontWeightEditor.xaml │ │ ├── FontWeightEditor.xaml.cs │ │ ├── GridLengthEditor.xaml │ │ ├── GridLengthEditor.xaml.cs │ │ ├── GuidEditor.xaml │ │ ├── GuidEditor.xaml.cs │ │ ├── IntegerEditor.xaml │ │ ├── IntegerEditor.xaml.cs │ │ ├── ListEditor.xaml │ │ ├── ListEditor.xaml.cs │ │ ├── LongEditor.xaml │ │ ├── LongEditor.xaml.cs │ │ ├── PointEditor.xaml │ │ ├── PointEditor.xaml.cs │ │ ├── RectEditor.xaml │ │ ├── RectEditor.xaml.cs │ │ ├── SizeEditor.xaml │ │ ├── SizeEditor.xaml.cs │ │ ├── StringEditor.xaml │ │ ├── StringEditor.xaml.cs │ │ ├── ThicknessEditor.xaml │ │ ├── ThicknessEditor.xaml.cs │ │ ├── TimeSpanEditor.xaml │ │ ├── TimeSpanEditor.xaml.cs │ │ ├── TransformEditor.xaml │ │ ├── TransformEditor.xaml.cs │ │ ├── UriEditor.xaml │ │ ├── UriEditor.xaml.cs │ │ ├── VersionEditor.xaml │ │ └── VersionEditor.xaml.cs │ ├── PropertyList.cs │ ├── PropertyListAttributes.cs │ ├── PropertyListCommands.cs │ ├── PropertyListE.xaml │ ├── PropertyListE.xaml.cs │ ├── PropertyListEnums.cs │ └── PropertyListEventArgs.cs ├── RectConverter.cs ├── SelectPanel.cs ├── SelectableCollection.cs ├── SelectableCollectionView.cs ├── SelectableItem.xaml ├── SelectableItem.xaml.cs ├── SelectableUserControl.cs ├── SelectionChangedEventArgs.cs ├── SolidShineUi.csproj ├── SplitButton.cs ├── SsuiTheme.cs ├── StringSpinner.cs ├── TabControl.cs ├── TabItem.cs ├── ThemeInfo.cs ├── ThemedControl.cs ├── Themes │ └── Generic.xaml ├── TimeSpinner.cs ├── Utils │ ├── BaseExtensions.cs │ ├── ColorListItem.xaml │ ├── ColorListItem.xaml.cs │ ├── ColorSwatchButton.cs │ ├── CornerRadiusModifierConverter.cs │ ├── DebugOutputValueConverter.cs │ ├── DoubleStringConverter.cs │ ├── FilePathToIconConverter.cs │ ├── FilePathToNameConverter.cs │ ├── GradientBar.xaml │ ├── GradientBar.xaml.cs │ ├── GradientStopItem.xaml │ ├── GradientStopItem.xaml.cs │ ├── IconLoader.cs │ ├── IconSizeConverter.cs │ ├── ImageColorPicker.cs │ ├── ImageTextListItem.xaml │ ├── ImageTextListItem.xaml.cs │ ├── LimitableStringCollection.cs │ ├── MultilineStringInputDialog.xaml │ ├── MultilineStringInputDialog.xaml.cs │ ├── PartialCornerRadiusConverter.cs │ ├── PartialThicknessConverter.cs │ ├── PartialValueHelper.cs │ ├── RectEdit.xaml │ ├── RectEdit.xaml.cs │ ├── RelativePositionSelect.xaml │ ├── RelativePositionSelect.xaml.cs │ ├── SpinnerBase.cs │ ├── TabDisplayItem.xaml │ ├── TabDisplayItem.xaml.cs │ ├── TabScrollCommandAction.cs │ ├── TwoPositionsSelect.xaml │ └── TwoPositionsSelect.xaml.cs ├── WildcardMatch.cs └── lib │ └── Microsoft.Windows.Shell.dll ├── SsuiSample ├── About.xaml ├── About.xaml.cs ├── App.xaml ├── App.xaml.cs ├── AssemblyInfo.cs ├── ButtonsTest.xaml ├── ButtonsTest.xaml.cs ├── CheckBoxTest.xaml ├── CheckBoxTest.xaml.cs ├── DialogsTest.xaml ├── DialogsTest.xaml.cs ├── FileSelectTest.xaml ├── FileSelectTest.xaml.cs ├── FlatWindowTest.xaml ├── FlatWindowTest.xaml.cs ├── GlobalSuppressions.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs ├── PositionSelectTest.xaml ├── PositionSelectTest.xaml.cs ├── PropertyListTest.xaml ├── PropertyListTest.xaml.cs ├── Resources │ ├── Icon.ico │ ├── Images │ │ ├── ImageColor.png │ │ └── SmileyColor.png │ ├── SeparatorItem.xaml │ └── SeparatorItem.xaml.cs ├── SelectPanelScrollTest.xaml ├── SelectPanelScrollTest.xaml.cs ├── SelectPanelTest.xaml ├── SelectPanelTest.xaml.cs ├── SpinnersTest.xaml ├── SpinnersTest.xaml.cs ├── SsuiSample.csproj ├── TabControlTest.xaml ├── TabControlTest.xaml.cs ├── TwoBasicSelectPanels.xaml ├── TwoBasicSelectPanels.xaml.cs ├── TwoPositionSelectTest.xaml ├── TwoPositionSelectTest.xaml.cs ├── WildcardMatchTest.xaml └── WildcardMatchTest.xaml.cs └── SsuiWindows11Interop ├── FlatWindowInterop.cs └── SsuiWindows11Interop.csproj /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.cs] 2 | 3 | # RXRA001: Property can be expanded 4 | dotnet_diagnostic.RXRA001.severity = none 5 | 6 | # RXRA004: Property can be expanded 7 | dotnet_diagnostic.RXRA004.severity = silent 8 | 9 | # CA1401: P/Invokes should not be visible 10 | dotnet_diagnostic.CA1401.severity = none 11 | 12 | # IDE0090: Use 'new(...)' 13 | csharp_style_implicit_object_creation_when_type_is_apparent = false:suggestion 14 | 15 | # CA2211: Non-constant fields should not be visible 16 | dotnet_diagnostic.CA2211.severity = none 17 | 18 | # IDE0017: Simplify object initialization 19 | dotnet_diagnostic.IDE0017.severity = silent 20 | csharp_indent_labels = no_change 21 | 22 | # IDE0063: Use simple 'using' statement 23 | csharp_prefer_simple_using_statement = false:suggestion 24 | 25 | # CA1847: Use char literal for a single character lookup 26 | dotnet_diagnostic.CA1847.severity = none 27 | 28 | # IDE1006: Naming Styles 29 | dotnet_diagnostic.IDE1006.severity = none 30 | 31 | # IDE0045: Convert to conditional expression 32 | dotnet_diagnostic.IDE0045.severity = silent 33 | 34 | # IDE0046: Convert to conditional expression 35 | dotnet_diagnostic.IDE0046.severity = silent 36 | 37 | # IDE0056: Use index operator 38 | csharp_style_prefer_index_operator = false:suggestion 39 | 40 | # IDE0066: Convert switch statement to expression 41 | csharp_style_prefer_switch_expression = false:suggestion 42 | 43 | # IDE0079: Remove unnecessary suppression 44 | dotnet_diagnostic.IDE0079.severity = silent 45 | 46 | # IDE0083: Use pattern matching 47 | dotnet_diagnostic.IDE0083.severity = none 48 | dotnet_diagnostic.CA1865.severity = none 49 | dotnet_diagnostic.CA1866.severity = none 50 | 51 | # SYSLIB1054: Use 'LibraryImportAttribute' instead of 'DllImportAttribute' to generate P/Invoke marshalling code at compile time 52 | dotnet_diagnostic.SYSLIB1054.severity = none 53 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.github/workflows/dotnetcore.yml: -------------------------------------------------------------------------------- 1 | name: .NET Core 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: windows-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v1 12 | - name: Setup .NET Core 13 | uses: actions/setup-dotnet@v1 14 | with: 15 | dotnet-version: 9.0.201 16 | - name: Add Nuget Source 17 | run: dotnet nuget add source https://api.nuget.org/v3/index.json -n "nuget.org" 18 | continue-on-error: true 19 | - name: Build SolidShineUi project 20 | run: dotnet build .\SolidShineUi\SolidShineUi.csproj --configuration Release 21 | - name: Build SsuiSample project 22 | run: dotnet build SsuiSample --configuration Release 23 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | // Use IntelliSense to find out which attributes exist for C# debugging 6 | // Use hover for the description of the existing attributes 7 | // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md 8 | "name": ".NET Core Launch (console)", 9 | "type": "coreclr", 10 | "request": "launch", 11 | "preLaunchTask": "build", 12 | // If you have changed target frameworks, make sure to update the program path. 13 | "program": "${workspaceFolder}/SsuiSample/bin/Debug/netcoreapp3.1/SsuiSample.dll", 14 | "args": [], 15 | "cwd": "${workspaceFolder}/SsuiSample", 16 | // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console 17 | "console": "internalConsole", 18 | "stopAtEntry": false 19 | }, 20 | { 21 | "name": ".NET Core Attach", 22 | "type": "coreclr", 23 | "request": "attach" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "build", 6 | "command": "dotnet", 7 | "type": "process", 8 | "args": [ 9 | "build", 10 | "${workspaceFolder}/SsuiSample/SsuiSample.csproj", 11 | "/property:GenerateFullPaths=true", 12 | "/consoleloggerparameters:NoSummary" 13 | ], 14 | "problemMatcher": "$msCompile" 15 | }, 16 | { 17 | "label": "publish", 18 | "command": "dotnet", 19 | "type": "process", 20 | "args": [ 21 | "publish", 22 | "${workspaceFolder}/SsuiSample/SsuiSample.csproj", 23 | "/property:GenerateFullPaths=true", 24 | "/consoleloggerparameters:NoSummary" 25 | ], 26 | "problemMatcher": "$msCompile" 27 | }, 28 | { 29 | "label": "watch", 30 | "command": "dotnet", 31 | "type": "process", 32 | "args": [ 33 | "watch", 34 | "run", 35 | "${workspaceFolder}/SsuiSample/SsuiSample.csproj", 36 | "/property:GenerateFullPaths=true", 37 | "/consoleloggerparameters:NoSummary" 38 | ], 39 | "problemMatcher": "$msCompile" 40 | } 41 | ] 42 | } -------------------------------------------------------------------------------- /Docs/README.md: -------------------------------------------------------------------------------- 1 | For full documentation, please view the [GitHub wiki](https://github.com/JaykeBird/ssui/wiki/home). -------------------------------------------------------------------------------- /Docs/ROADMAP.md: -------------------------------------------------------------------------------- 1 | SolidShineUI Library Roadmap 2 | ============================ 3 | 4 | This is the general roadmap for the future of this library. 5 | 6 | Unlike other roadmaps that I've made (or others that you may have seen online), this roadmap is based upon the year I plan to implement the given items and are not tied to a specific version. 7 | 8 | This file will be edited as I make adjustments and changes. Nothing here is set in stone. 9 | 10 | ## Done 11 | 12 | - Release version 1.7 13 | - NuGet support 14 | - .NET 5.0 support 15 | - Release version 1.8 16 | - Keyboard shortcut classes 17 | - Improvements to FontSelectDialog 18 | - TabControl is now ready! 19 | - Release version 1.8.1 20 | - Bug fixes 21 | - Release version 1.8.2 22 | - Tab drag/drop 23 | - Improvements to KeyRegistry 24 | - Additional XML comments for code 25 | - Release version 1.8.3 26 | - Bug fixes 27 | - Release version 1.9 28 | - Rewrite SelectPanel to not base from UserControl 29 | - To help with this, SelectableCollection can be used 30 | - Add "light theme" and "dark theme" to ColorScheme 31 | - first pass at PropertyGrid control 32 | - Versions 1.9.2 and 1.9.3 33 | - Further work on PropertyGrid 34 | - .NET 7.0 support 35 | - Bulk of online documentation set up 36 | 37 | ## 2022 38 | 39 | - Add extra documents to describe more things 40 | - Finish "must-have"s for PropertyGrid 41 | - Begin testing with AvaloniaUI support 42 | 43 | ## Mid 2023 44 | 45 | - Ribbon control 46 | - Toolbar controls 47 | - Redesigned ColorScheme system (might be renamed SsuiTheme) 48 | - Work on port to AvaloniaUI (11.0 will be the version I'm targeting) 49 | - DataTable control, DataInputDialog 50 | - use same core bits as PropertyList 51 | - will need a static basic list of property editors, rather than it being stored in the PropertyList 52 | - Touch/keyboard support for ImageColorPicker 53 | - May require yet another rewrite 54 | -------------------------------------------------------------------------------- /Icons/Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/Icons/Icon.ico -------------------------------------------------------------------------------- /Icons/Icon16.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/Icons/Icon16.pdn -------------------------------------------------------------------------------- /Icons/Icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/Icons/Icon16.png -------------------------------------------------------------------------------- /Icons/Icon32.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/Icons/Icon32.pdn -------------------------------------------------------------------------------- /Icons/Icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/Icons/Icon32.png -------------------------------------------------------------------------------- /Icons/Icon48.pdn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/Icons/Icon48.pdn -------------------------------------------------------------------------------- /Icons/Icon48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/Icons/Icon48.png -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2017-2023 Jayke R. Huempfner 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /SolidShineUi.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.2.32505.173 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SolidShineUi", "SolidShineUi\SolidShineUi.csproj", "{E45CD1DB-F48D-4B29-B832-52D5B634B145}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SsuiSample", "SsuiSample\SsuiSample.csproj", "{738CB827-ADE5-4BB5-9919-3A5FE88A7EBA}" 9 | ProjectSection(ProjectDependencies) = postProject 10 | {E45CD1DB-F48D-4B29-B832-52D5B634B145} = {E45CD1DB-F48D-4B29-B832-52D5B634B145} 11 | EndProjectSection 12 | EndProject 13 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{69561AEC-53B8-4459-9EE7-EA22411500C5}" 14 | ProjectSection(SolutionItems) = preProject 15 | .editorconfig = .editorconfig 16 | README.md = README.md 17 | Docs\ROADMAP.md = Docs\ROADMAP.md 18 | EndProjectSection 19 | EndProject 20 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SsuiWindows11Interop", "SsuiWindows11Interop\SsuiWindows11Interop.csproj", "{D3579F5A-7155-4575-A1C4-BADF0B1EB8A0}" 21 | EndProject 22 | Global 23 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 24 | Debug|Any CPU = Debug|Any CPU 25 | Release|Any CPU = Release|Any CPU 26 | EndGlobalSection 27 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 28 | {E45CD1DB-F48D-4B29-B832-52D5B634B145}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {E45CD1DB-F48D-4B29-B832-52D5B634B145}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {E45CD1DB-F48D-4B29-B832-52D5B634B145}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {E45CD1DB-F48D-4B29-B832-52D5B634B145}.Release|Any CPU.Build.0 = Release|Any CPU 32 | {738CB827-ADE5-4BB5-9919-3A5FE88A7EBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {738CB827-ADE5-4BB5-9919-3A5FE88A7EBA}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {738CB827-ADE5-4BB5-9919-3A5FE88A7EBA}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {738CB827-ADE5-4BB5-9919-3A5FE88A7EBA}.Release|Any CPU.Build.0 = Release|Any CPU 36 | {D3579F5A-7155-4575-A1C4-BADF0B1EB8A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 37 | {D3579F5A-7155-4575-A1C4-BADF0B1EB8A0}.Debug|Any CPU.Build.0 = Debug|Any CPU 38 | {D3579F5A-7155-4575-A1C4-BADF0B1EB8A0}.Release|Any CPU.ActiveCfg = Release|Any CPU 39 | {D3579F5A-7155-4575-A1C4-BADF0B1EB8A0}.Release|Any CPU.Build.0 = Release|Any CPU 40 | EndGlobalSection 41 | GlobalSection(SolutionProperties) = preSolution 42 | HideSolutionNode = FALSE 43 | EndGlobalSection 44 | GlobalSection(ExtensibilityGlobals) = postSolution 45 | SolutionGuid = {1F0A9CFD-D3AA-4BC8-B36B-CA794351B815} 46 | EndGlobalSection 47 | EndGlobal 48 | -------------------------------------------------------------------------------- /SolidShineUi/BindableChild.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows; 3 | using System.Windows.Controls; 4 | using System.Windows.Data; 5 | 6 | // unfortunately, I didn't write here where I had originally gotten this code from 7 | // but it appears to be this: 8 | // https://social.msdn.microsoft.com/Forums/sqlserver/en-US/62daec04-4437-4695-8d1f-8054459ea340/a-converter-return-a-border-it-doesnt-work?forum=wpf 9 | // thanks to Pete Laker 10 | 11 | namespace SolidShineUi 12 | { 13 | /// 14 | /// Add the ability to set a child to an object via WPF binding. 15 | /// 16 | public class BindableChild 17 | { 18 | /// 19 | /// Get the bindable child element for this object. 20 | /// 21 | /// 22 | /// 23 | public static UIElement GetBindableChild(DependencyObject obj) 24 | { 25 | return (UIElement)obj.GetValue(BindableChildProperty); 26 | } 27 | 28 | /// 29 | /// Set the bindable child element for this object. 30 | /// 31 | /// 32 | /// 33 | public static void SetBindableChild(DependencyObject obj, UIElement value) 34 | { 35 | obj.SetValue(BindableChildProperty, value); 36 | } 37 | 38 | #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member 39 | public static readonly DependencyProperty BindableChildProperty = 40 | DependencyProperty.RegisterAttached("BindableChild", typeof(UIElement), typeof(BindableChild), new UIPropertyMetadata(null, BindableChildPropertyChanged)); 41 | #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member 42 | 43 | static void BindableChildPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 44 | { 45 | if (sender is Decorator ele) 46 | { 47 | ele.Child = (UIElement)e.NewValue; 48 | } 49 | } 50 | } 51 | 52 | /// 53 | /// A converter used to set the child of a control to a bound element. 54 | /// 55 | public class BindableChildConverter : IValueConverter 56 | { 57 | /// 58 | /// Convert an UIElement to be the child of a Border. 59 | /// 60 | public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 61 | { 62 | #if NETCOREAPP 63 | if (value == null) return null!; 64 | #else 65 | if (value == null) return null; 66 | #endif 67 | 68 | //var border = new Border(); 69 | //border.Child = (value as UIElement); 70 | //return border; 71 | 72 | return new Border() 73 | { 74 | Child = value as UIElement 75 | }; 76 | } 77 | 78 | /// 79 | /// Convert a Border's child to get the UIElement it represents. 80 | /// 81 | public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 82 | { 83 | if (value is Border b) 84 | { 85 | return b.Child; 86 | } 87 | else 88 | { 89 | #if NETCOREAPP 90 | return null!; 91 | #else 92 | return null; 93 | #endif 94 | } 95 | } 96 | } 97 | } -------------------------------------------------------------------------------- /SolidShineUi/BindableHighContrast.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | 8 | namespace SolidShineUi 9 | { 10 | // https://stackoverflow.com/questions/18708794/how-can-i-fall-back-to-a-high-contrast-color-in-wpf 11 | 12 | /// 13 | /// When set up properly, allows a WPF control style to be triggered when the Windows High Contrast mode setting is changed. See remarks for details. 14 | /// 15 | /// 16 | /// For the control or style in question that you want to monitor changes to high contrast in, set the property 17 | /// flat:BindableHighContrast.HighContrast = "{DynamicResource ResourceKey={x:Static Member=SystemParameters.HighContrastKey}}" in the control or style. 18 | /// Then you can use the trigger as such: <Trigger Property="flat:BindableHighContrast.HighContrast" Value="True"> ... </Trigger>. 19 | /// Visit this StackOverflow question for more information and source. 20 | /// This class is identical to the "SystemParameterProperties" class in the accepted answer. 21 | /// 22 | public static class BindableHighContrast 23 | { 24 | #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member 25 | public static readonly DependencyProperty HighContrastProperty = 26 | DependencyProperty.RegisterAttached("HighContrast", typeof(bool), typeof(BindableHighContrast), 27 | new FrameworkPropertyMetadata() { Inherits = true }); 28 | #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member 29 | 30 | /// 31 | /// Get whether a Windows High Contrast mode is currently activated. 32 | /// 33 | /// The object to get the property value for. 34 | public static bool GetHighContrast(DependencyObject obj) 35 | { 36 | return (bool)obj.GetValue(HighContrastProperty); 37 | } 38 | 39 | /// 40 | /// Set whether a Windows High Contrast mode is currently activated. This shouldn't be directly used in your code. Please see the remarks for . 41 | /// 42 | public static void SetHighContrast(DependencyObject obj, bool value) 43 | { 44 | obj.SetValue(HighContrastProperty, value); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /SolidShineUi/ColorToBrushConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows; 4 | using System.Windows.Data; 5 | using System.Windows.Media; 6 | 7 | namespace SolidShineUi 8 | { 9 | /// 10 | /// Converts a Color into a SolidColorBrush. 11 | /// 12 | public class ColorToBrushConverter : IValueConverter 13 | { 14 | /// 15 | /// Convert a Color into a SolidColorBrush. 16 | /// 17 | /// 18 | /// If the value is not of type , then is returned. 19 | /// 20 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 21 | { 22 | if (value is Color c) 23 | { 24 | return new SolidColorBrush(c); 25 | } 26 | else return DependencyProperty.UnsetValue; 27 | } 28 | 29 | /// 30 | /// Convert a SolidColorBrush to its Color. 31 | /// 32 | /// 33 | /// If the value is not of type , then is returned. 34 | /// 35 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 36 | { 37 | if (value is SolidColorBrush s) 38 | { 39 | return s.Color; 40 | } 41 | else return DependencyProperty.UnsetValue; 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/ErrorBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/ErrorBlack.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/ErrorColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/ErrorColor.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/ErrorWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/ErrorWhite.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/HandBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/HandBlack.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/HandColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/HandColor.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/HandWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/HandWhite.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/InfoBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/InfoBlack.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/InfoColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/InfoColor.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/InfoWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/InfoWhite.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/LockBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/LockBlack.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/LockColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/LockColor.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/LockWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/LockWhite.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/QuestionBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/QuestionBlack.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/QuestionColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/QuestionColor.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/QuestionWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/QuestionWhite.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/StopBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/StopBlack.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/StopColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/StopColor.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/StopWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/StopWhite.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/WarningBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/WarningBlack.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/WarningColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/WarningColor.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/WarningWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/DialogImages/WarningWhite.png -------------------------------------------------------------------------------- /SolidShineUi/DialogImages/desktop.ini: -------------------------------------------------------------------------------- 1 | [LocalizedFileNames] 2 | ErrorColor32.png=@ErrorColor32.png,0 3 | ExclamationColor32.png=@ExclamationColor32.png,0 4 | HelpColor32.png=@HelpColor32.png,0 5 | InfoColor32.png=@InfoColor32.png,0 6 | WarningColor32.png=@WarningColor32.png,0 7 | WarningWhite32.png=@WarningWhite32.png,0 8 | WarningBlack32.png=@WarningBlack32.png,0 9 | HelpWhite32.png=@HelpWhite32.png,0 10 | InfoBlack32.png=@InfoBlack32.png,0 11 | InfoWhite32.png=@InfoWhite32.png,0 12 | ErrorBlack32.png=@ErrorBlack32.png,0 13 | EventBlack32.png=@EventBlack32.png,0 14 | ExclamationBlack32.png=@ExclamationBlack32.png,0 15 | ExclamationWhite32.png=@ExclamationWhite32.png,0 16 | HelpBlack32.png=@HelpBlack32.png,0 17 | -------------------------------------------------------------------------------- /SolidShineUi/Dialogs/MessageDialog.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /SolidShineUi/Dialogs/StringInputDialog.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /SolidShineUi/FlatWindowCommands.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | 3 | namespace SolidShineUi 4 | { 5 | /// 6 | /// Contains a collection of commands that can be used with the class (and any classes that inherit from it). 7 | /// 8 | public static class FlatWindowCommands 9 | { 10 | 11 | /// A WPF command that when executed, will close the specified window. 12 | public static RoutedCommand CloseWindow { get; } = new RoutedCommand("CloseWindow", typeof(FlatWindowCommands)); 13 | 14 | /// A WPF command that when executed, will minimize the window (hide in the taskbar). 15 | public static RoutedCommand Minimize { get; } = new RoutedCommand("Minimize", typeof(FlatWindowCommands)); 16 | 17 | /// A WPF command that when executed, will maximize the window (take up all space on the screen). 18 | public static RoutedCommand Maximize { get; } = new RoutedCommand("Maximize", typeof(FlatWindowCommands)); 19 | 20 | /// A WPF command that when executed, will restore the window to its state prior to being minimized or maximized. 21 | public static RoutedCommand Restore { get; } = new RoutedCommand("Restore", typeof(FlatWindowCommands)); 22 | 23 | /// A WPF command that when executed, will display the window's system menu in the top-left corner of the window. 24 | public static RoutedCommand DisplaySystemMenu { get; } = new RoutedCommand("DisplaySystemMenu", typeof(FlatWindowCommands)); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SolidShineUi/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | // This file is used by Code Analysis to maintain SuppressMessage 2 | // attributes that are applied to this project. 3 | // Project-level suppressions either have no target or are given 4 | // a specific target and scoped to a namespace, type, member, etc. 5 | 6 | using System.Diagnostics.CodeAnalysis; 7 | 8 | [assembly: SuppressMessage("Style", "IDE0057:Use range operator", Justification = "Not supported on .NET Framework")] 9 | 10 | //[assembly: SuppressMessage("Usage", "CA2211:Non-constant fields should not be visible", Justification = "Dependency Properties are set this way")] 11 | -------------------------------------------------------------------------------- /SolidShineUi/Images/AddBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/AddBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/AddColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/AddColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/AddWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/AddWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DeleteBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DeleteBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DeleteColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DeleteColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DeleteWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DeleteWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownLeftArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownLeftArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownLeftArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownLeftArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownLeftArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownLeftArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownRightArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownRightArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownRightArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownRightArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownRightArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownRightArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/DownWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/DownWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ExitBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ExitBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ExitColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ExitColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ExitWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ExitWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/FontBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/FontBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/FontColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/FontColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/FontWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/FontWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/FullFillBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/FullFillBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/FullFillColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/FullFillColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/FullFillWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/FullFillWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ImageBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ImageBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ImageColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ImageColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ImageWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ImageWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/LeftArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/LeftArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/LeftArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/LeftArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/LeftArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/LeftArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/LeftRightArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/LeftRightArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/LeftRightArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/LeftRightArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/LeftRightArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/LeftRightArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/OpenBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/OpenBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/OpenColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/OpenColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/OpenWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/OpenWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ReloadBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ReloadBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ReloadColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ReloadColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ReloadWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ReloadWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/RightArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/RightArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/RightArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/RightArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/RightArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/RightArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SearchBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SearchBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SearchColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SearchColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SearchImageBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SearchImageBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SearchImageColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SearchImageColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SearchImageWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SearchImageWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SearchWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SearchWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SelectBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SelectBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SelectColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SelectColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SelectWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SelectWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SmallExitBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SmallExitBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SmallExitColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SmallExitColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/SmallExitWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/SmallExitWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/StackBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/StackBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/StackColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/StackColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/StackWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/StackWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/StringBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/StringBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/StringColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/StringColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/StringWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/StringWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TextBoldBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TextBoldBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TextBoldColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TextBoldColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TextBoldWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TextBoldWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TextItalicBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TextItalicBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TextItalicColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TextItalicColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TextItalicWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TextItalicWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ThreeDotsBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ThreeDotsBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ThreeDotsColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ThreeDotsColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/ThreeDotsWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/ThreeDotsWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TransferBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TransferBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TransferColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TransferColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/TransferWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/TransferWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpDownArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpDownArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpDownArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpDownArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpDownArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpDownArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpLeftArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpLeftArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpLeftArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpLeftArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpLeftArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpLeftArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpRightArrowBlack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpRightArrowBlack.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpRightArrowColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpRightArrowColor.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpRightArrowWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpRightArrowWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Images/UpWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/Images/UpWhite.png -------------------------------------------------------------------------------- /SolidShineUi/Keyboard/ActionKeyAction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | 8 | namespace SolidShineUi.KeyboardShortcuts 9 | { 10 | 11 | /// 12 | /// A key action that executes an delegate when activated. 13 | /// 14 | public class ActionKeyAction : IKeyAction 15 | { 16 | Action a; 17 | 18 | #if NETCOREAPP 19 | /// 20 | /// Gets the UI element that this action is related to, if any. 21 | /// 22 | public UIElement? SourceElement { get; } 23 | 24 | /// 25 | /// Create a new ActionKeyAction. 26 | /// 27 | /// The action to execute when this key action is activated. 28 | /// The unique ID of this key action. 29 | /// The UI element, if any, this action is related to. For example, it could be a menu item or button that would alternatively trigger this action. 30 | public ActionKeyAction(Action action, string methodId, UIElement? sourceElement = null) 31 | { 32 | a = action; 33 | ID = methodId; 34 | SourceElement = sourceElement; 35 | } 36 | 37 | #else 38 | /// 39 | /// Gets the UI element that this action is related to, if any. 40 | /// 41 | public UIElement SourceElement { get; } 42 | 43 | /// 44 | /// Create a new ActionKeyAction. 45 | /// 46 | /// The action to execute when this key action is activated. 47 | /// The unique ID of this key action. 48 | /// The UI element, if any, this action is related to. For example, it could be a menu item or button that would alternatively trigger this action. 49 | public ActionKeyAction(Action action, string methodId, UIElement sourceElement = null) 50 | { 51 | a = action; 52 | ID = methodId; 53 | SourceElement = sourceElement; 54 | } 55 | #endif 56 | /// 57 | /// Get or set the unique ID associated with this key action. 58 | /// 59 | public string ID { get; set; } 60 | 61 | /// 62 | /// Activate this key action. 63 | /// 64 | public void Execute() 65 | { 66 | a.Invoke(); 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /SolidShineUi/MenuItem.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace SolidShineUi 8 | { 9 | 10 | /// 11 | /// Adds additional methods that can be used to hook into the menu item's IsEnabledChanged event. 12 | /// 13 | public static class MenuItemExtensions 14 | { 15 | 16 | /// 17 | /// Attach a handler for the IsEnabledChanged event for a particular MenuItem. 18 | /// 19 | /// The MenuItem to attach to. 20 | /// The event handler to use. 21 | /// When done listening to this event or when deconstructing or cleaning up the UI, call DetachEnabledHandler to detach this event handler. 22 | public static void AttachEnabledHandler(this System.Windows.Controls.MenuItem mi, System.Windows.DependencyPropertyChangedEventHandler eh) 23 | { 24 | mi.IsEnabledChanged += eh; 25 | } 26 | 27 | /// 28 | /// Detach a handler for the IsEnabledChanged event for a particular MenuItem. 29 | /// 30 | /// The MenuItem to detach from. 31 | /// The event handler to detach. 32 | public static void DetachEnabledHandler(this System.Windows.Controls.MenuItem mi, System.Windows.DependencyPropertyChangedEventHandler eh) 33 | { 34 | mi.IsEnabledChanged -= eh; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /SolidShineUi/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Ssui": { 4 | "commandName": "Project", 5 | "nativeDebugging": false 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/Dialogs/CharInputDialog.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/Dialogs/RectEditDialog.xaml: -------------------------------------------------------------------------------- 1 |  11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/IPropertyEditorHost.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | 8 | namespace SolidShineUi.PropertyList 9 | { 10 | /// 11 | /// Rerpresents an interface for all controls that can host one or more items. 12 | /// 13 | public interface IPropertyEditorHost 14 | { 15 | 16 | 17 | /// 18 | /// Get the object that is currently being observed in this control. 19 | /// 20 | #if NETCOREAPP 21 | object? GetCurrentlyLoadedObject(); 22 | #else 23 | object GetCurrentlyLoadedObject(); 24 | #endif 25 | 26 | /// 27 | /// Get the window containing the host control, if available. 28 | /// 29 | /// The window containing the host control, if there is one; null otherwise. 30 | /// 31 | /// For implementers of this interface, just call and return that value. 32 | /// 33 | #if NETCOREAPP 34 | Window? GetWindow(); 35 | #else 36 | Window GetWindow(); 37 | #endif 38 | 39 | /// 40 | /// Create a new IPropertyEditor object appropriate for the passed-in type. This is based upon what types are registered in the host control. 41 | /// 42 | /// The type for which to get a IPropertyEditor for. 43 | /// An IPropertyEditor that can be used for editing the type, if available; null otherwise 44 | #if NETCOREAPP 45 | IPropertyEditor? CreateEditorForType(Type propType); 46 | #else 47 | IPropertyEditor CreateEditorForType(Type propType); 48 | #endif 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/ListEditorItem.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditorItem.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 32 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/BooleanEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/CharEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/ColorEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/CornerRadiusEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/CursorEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/DateTimeEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/DecimalEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/DoubleEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/EnumEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/EnumEditor.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Windows; 5 | using System.Windows.Controls; 6 | using System.Linq; 7 | using System.Reflection; 8 | 9 | namespace SolidShineUi.PropertyList.PropertyEditors 10 | { 11 | /// 12 | /// A property editor for editing objects. 13 | /// 14 | public partial class EnumEditor : UserControl, IPropertyEditor 15 | { 16 | /// 17 | /// Create an EnumEditor. 18 | /// 19 | public EnumEditor() 20 | { 21 | InitializeComponent(); 22 | } 23 | 24 | /// 25 | public List ValidTypes => (new[] { typeof(Enum) }).ToList(); 26 | 27 | /// 28 | public bool EditorAllowsModifying => true; 29 | 30 | /// 31 | public void SetHostControl(IPropertyEditorHost host) { /* _host = host; */ } 32 | 33 | /// 34 | public ColorScheme ColorScheme { set { ApplyColorScheme(value); } } 35 | 36 | /// 37 | public void ApplyColorScheme(ColorScheme cs) { } 38 | 39 | /// 40 | public FrameworkElement GetFrameworkElement() 41 | { 42 | return this; 43 | } 44 | 45 | /// 46 | public bool IsPropertyWritable 47 | { 48 | get => cbbEnums.IsEnabled; 49 | set => cbbEnums.IsEnabled = value; 50 | } 51 | 52 | /// 53 | #if NETCOREAPP 54 | public event EventHandler? ValueChanged; 55 | 56 | /// 57 | public object? GetValue() 58 | #else 59 | public event EventHandler ValueChanged; 60 | 61 | /// 62 | public object GetValue() 63 | #endif 64 | { 65 | if (cbbEnums.SelectedIndex == -1) 66 | { 67 | return null; 68 | } 69 | else 70 | { 71 | return cbbEnums.SelectedEnumValue; 72 | } 73 | } 74 | 75 | #if NETCOREAPP 76 | /// 77 | public void LoadValue(object? value, Type type) 78 | #else 79 | /// 80 | public void LoadValue(object value, Type type) 81 | #endif 82 | { 83 | cbbEnums.Enum = type; 84 | if (type.GetCustomAttribute() != null) 85 | { 86 | // this is an enum that supports flags 87 | // in the future, I'll need to enable a way to select multiple items 88 | } 89 | 90 | if (value == null) 91 | { 92 | cbbEnums.SelectedIndex = -1; 93 | } 94 | else 95 | { 96 | cbbEnums.SelectedEnumValue = value; 97 | } 98 | } 99 | 100 | private void cbbEnums_SelectionChanged(object sender, SelectionChangedEventArgs e) 101 | { 102 | ValueChanged?.Invoke(this, e); 103 | } 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/EnumerableEditor.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/FontFamilyEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/FontStyleEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/FontWeightEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/GridLengthEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/GuidEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/IntegerEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/ListEditor.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/LongEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | Decrease and Edit 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/PointEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/RectEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/SizeEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/StringEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/TimeSpanEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/TransformEditor.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/UriEditor.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyEditors/VersionEditor.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyListAttributes.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SolidShineUi.PropertyList 4 | { 5 | /// 6 | /// An attribute that can be applied to properties; 7 | /// when PropertyList loads an object, any properties in that object with this attribute are skipped. 8 | /// 9 | [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] 10 | public class PropertyListHideAttribute : Attribute 11 | { 12 | /// 13 | /// Create a PropertyListHideAttribute. 14 | /// 15 | public PropertyListHideAttribute() { } 16 | } 17 | 18 | /// 19 | /// An attribute that can be applied to properties; 20 | /// if a PropertyList is set to only load properties with this attribute, all properties in an object are skipped unless they have this property. 21 | /// 22 | [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] 23 | public class PropertyListShowAttribute : Attribute 24 | { 25 | /// 26 | /// Create a PropertyListShowAttribute. 27 | /// 28 | public PropertyListShowAttribute() { } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyListCommands.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Input; 2 | 3 | namespace SolidShineUi.PropertyList 4 | { 5 | /// 6 | /// A collection of Commands to use with the control. 7 | /// 8 | public static class PropertyListCommands 9 | { 10 | /// A WPF command that when executed, will load the parameter object into a PropertyList. 11 | /// See for more details. 12 | public static RoutedCommand LoadObject { get; } = new RoutedCommand("LoadObject", typeof(PropertyListCommands)); 13 | 14 | /// A WPF command that when executed, will prompt the PropertyList to reload the currently loaded object 15 | public static RoutedCommand Reload { get; } = new RoutedCommand("Reload", typeof(PropertyListCommands)); 16 | 17 | 18 | /// A WPF command that when executed, will sort a PropertyList by name. 19 | /// See also property. 20 | public static RoutedCommand SortByName { get; } = new RoutedCommand("SortByName", typeof(PropertyListCommands)); 21 | 22 | 23 | /// A WPF command that when executed, will sort a PropertyList by name. 24 | /// See also property. 25 | public static RoutedCommand SortByCategory { get; } = new RoutedCommand("SortByCategory", typeof(PropertyListCommands)); 26 | 27 | 28 | /// A WPF command that when executed, will turn on or off gridlines for a PropertyList. 29 | /// See also property. 30 | public static RoutedCommand ToggleGridlines { get; } = new RoutedCommand("ToggleGridlines", typeof(PropertyListCommands)); 31 | 32 | 33 | /// A WPF command that when executed, will display a dialog so the end user can change the gridline brush for a PropertyList. 34 | /// See also property. 35 | public static RoutedCommand ChangeGridlineBrush { get; } = new RoutedCommand("ChangeGridlineBrush", typeof(PropertyListCommands)); 36 | 37 | 38 | /// A WPF command that when executed, will show or hide inherited properties for a PropertyList. 39 | /// See also property. 40 | public static RoutedCommand ToggleInheritedProperties { get; } = new RoutedCommand("ToggleInheritedProperties", typeof(PropertyListCommands)); 41 | 42 | 43 | /// A WPF command that when executed, will show or hide read-only properties for a PropertyList. 44 | /// See also property. 45 | public static RoutedCommand ToggleReadOnlyProperties { get; } = new RoutedCommand("ToggleReadOnlyProperties", typeof(PropertyListCommands)); 46 | 47 | 48 | /// A WPF command that when executed, will show or hide the Types column in a PropertyList. 49 | /// See also property. 50 | public static RoutedCommand ToggleTypesColumn { get; } = new RoutedCommand("ToggleInheritedProperties", typeof(PropertyListCommands)); 51 | 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /SolidShineUi/PropertyList/PropertyListEnums.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace SolidShineUi.PropertyList 8 | { 9 | /// 10 | /// Represents the sorting method used for sorting properties in a . 11 | /// 12 | public enum PropertySortOption 13 | { 14 | /// 15 | /// Sorted alphabetically by property name 16 | /// 17 | Name = 0, 18 | /// 19 | /// Sorted by category (as determined by a Category attribute being present) 20 | /// 21 | Category = 1 22 | } 23 | 24 | /// 25 | /// Represents what properties should be shown or hidden in a , by checking the attributes set with the property. 26 | /// 27 | [Flags] 28 | public enum PropertyListDisplayFlags 29 | { 30 | /// 31 | /// Hides properties that have the PropertyListHide attribute () set. 32 | /// 33 | HidePropertyListHide = 1, 34 | /// 35 | /// Hides properties that have the Browseable or EditorBrowseable attributes set (and set to false or Never). 36 | /// 37 | HideBrowseableFalse = 2, 38 | /// 39 | /// Hides properties that have the Obsolete attribute set. 40 | /// 41 | HideObsolete = 4, 42 | /// 43 | /// Only properties that have the PropertyListShow attribute () will be displayed. This overrides all other flags. 44 | /// 45 | OnlyShowPropertyListShow = 8, 46 | /// 47 | /// Ignore attributes and display all properties in an object. This overrides all other flags. 48 | /// 49 | ShowAll = 16, 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /SolidShineUi/RectConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Data; 8 | 9 | namespace SolidShineUi 10 | { 11 | /// 12 | /// A MultiValueConverter that takes 4 values and creates a Rect. This class can be used to get around the fact that a Rect cannot be used for XAML binding. 13 | /// 14 | public class RectConverter : IMultiValueConverter 15 | { 16 | #region IMultiValueConverter Members 17 | 18 | /// 19 | /// Convert 4 doubles to a Rect structure. 20 | /// 21 | /// The four doubles to use to measure the Rect's X, Y, Width, and Height values respectively. 22 | /// Not used, always returns a 23 | /// Not used 24 | /// Not used 25 | /// 26 | public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 27 | { 28 | return new Rect((double)values[0], (double)values[1], (double)values[2], (double)values[3]); 29 | } 30 | 31 | /// 32 | /// Convert a Rect into an array of doubles representing its X, Y, Width, and Height values respectively. 33 | /// 34 | /// Thrown if the value passed in is not a Rect structure. 35 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 36 | { 37 | if (value is Rect r) 38 | { 39 | //return new double[4] { r.X, r.Y, r.Width, r.Height }; 40 | return new object[4] { r.X, r.Y, r.Width, r.Height }; 41 | } 42 | else 43 | { 44 | throw new InvalidCastException(); 45 | } 46 | } 47 | 48 | #endregion 49 | 50 | /// 51 | /// A double defined as zero. Can be used if there is a value in your Rect that you do not want to set (via {x:Static} in XAML). 52 | /// 53 | public static double ZERO = 0.0d; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /SolidShineUi/SelectableItem.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /SolidShineUi/ThemeInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)] -------------------------------------------------------------------------------- /SolidShineUi/Utils/ColorListItem.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/CornerRadiusModifierConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Data; 9 | 10 | namespace SolidShineUi.Utils 11 | { 12 | /// 13 | /// A converter to modify one , by adding on a constant value or another CornerRadius object. 14 | /// 15 | public class CornerRadiusModifierConverter : IValueConverter 16 | { 17 | /// 18 | /// Modify a to add on a constant value set in . 19 | /// 20 | /// The object to read from (or a for a uniform value) 21 | /// Not used, returned type will always be a 22 | /// a or to add on to 23 | /// Not used 24 | /// A that only has a portion of its values set 25 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 26 | { 27 | CornerRadius cr = new CornerRadius(); 28 | CornerRadius cr2 = new CornerRadius(); 29 | 30 | if (value is double d) 31 | { 32 | cr = new CornerRadius(d); 33 | } 34 | else if (value is CornerRadius c) 35 | { 36 | cr = new CornerRadius(c.TopLeft, c.TopRight, c.BottomRight, c.BottomLeft); 37 | } 38 | 39 | if (parameter is double dp) 40 | { 41 | cr2 = new CornerRadius(dp); 42 | } 43 | else if (parameter is CornerRadius cp) 44 | { 45 | cr2 = new CornerRadius(cp.TopLeft, cp.TopRight, cp.BottomRight, cp.BottomLeft); 46 | } 47 | 48 | return new CornerRadius(cr.TopLeft + cr2.TopLeft, cr.TopRight + cr2.TopRight, cr.BottomRight + cr2.BottomRight, cr.BottomLeft + cr2.BottomLeft); 49 | } 50 | 51 | /// 52 | /// Converting back is not supported, as there is not a way to return the data that is lost. 53 | /// 54 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 55 | { 56 | return DependencyProperty.UnsetValue; 57 | } 58 | 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/DebugOutputValueConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Globalization; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Windows.Data; 8 | 9 | namespace SolidShineUi.Utils 10 | { 11 | 12 | /// 13 | /// A XAML converter that writes the inputted value to console, and then returns the value. No actual conversion is performed. 14 | /// 15 | /// 16 | /// Pass in an as a parameter to chain on that converter and have it convert the outputted value; 17 | /// any other item passed in as a parameter will be prepended to the written value to console. 18 | /// 19 | public class DebugOutputValueConverter : IValueConverter 20 | { 21 | 22 | /// 23 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 24 | { 25 | if (parameter is IValueConverter converter) 26 | { 27 | PostItem(value); 28 | return converter.Convert(value, targetType, null, culture); 29 | } 30 | else 31 | { 32 | if (parameter != null) 33 | { 34 | PostItem(parameter.ToString() + ": " + value.ToString()); 35 | } 36 | else 37 | { 38 | PostItem(value); 39 | } 40 | return value; 41 | } 42 | } 43 | 44 | /// 45 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 46 | { 47 | if (parameter is IValueConverter converter) 48 | { 49 | PostItem(value); 50 | return converter.ConvertBack(value, targetType, null, culture); 51 | } 52 | else 53 | { 54 | if (parameter != null) 55 | { 56 | PostItem(parameter.ToString() + ": " + value.ToString()); 57 | } 58 | else 59 | { 60 | PostItem(value); 61 | } 62 | return value; 63 | } 64 | } 65 | 66 | void PostItem(string s) 67 | { 68 | Debug.WriteLine(s); 69 | } 70 | 71 | void PostItem(object item) 72 | { 73 | PostItem(item.ToString() ?? "(null)"); 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/DoubleStringConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows; 4 | using System.Windows.Data; 5 | 6 | namespace SolidShineUi.Utils 7 | { 8 | /// 9 | /// Converts a double into a string for display in XAML. 10 | /// 11 | public class DoubleStringConverter : IValueConverter 12 | { 13 | 14 | /// 15 | /// Convert a double into a string, with rounding possible by setting the value. 16 | /// 17 | /// The double object to convert 18 | /// Not used, returned type will always be string 19 | /// The number of decimals to use (integer) 20 | /// Not used 21 | /// 22 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 23 | { 24 | try 25 | { 26 | int Decimals = (int)parameter; 27 | return Math.Round((double)value, Decimals).ToString(); 28 | } 29 | catch (InvalidCastException) 30 | { 31 | return (value ?? 0.0d).ToString() ?? "0.0"; 32 | } 33 | //throw new NotImplementedException(); 34 | } 35 | 36 | /// 37 | /// Convert a string back into a double, by parsing the string. 38 | /// 39 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 40 | { 41 | try 42 | { 43 | return double.Parse(value as string ?? "0"); 44 | } 45 | catch (FormatException) 46 | { 47 | return DependencyProperty.UnsetValue; 48 | } 49 | //throw new NotImplementedException(); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/FilePathToIconConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Windows; 7 | using System.Windows.Data; 8 | using System.Windows.Media.Imaging; 9 | 10 | namespace SolidShineUi.Utils 11 | { 12 | 13 | /// 14 | /// Converts a fully-qualified file path into a 16x16 icon for display in XAML. 15 | /// 16 | public class FilePathToIconConverter : IValueConverter 17 | { 18 | 19 | /// 20 | /// Converts a file's full path to a 16x16 icon. 21 | /// 22 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 23 | { 24 | if (value is IEnumerable ie) 25 | { 26 | string first = ie.FirstOrDefault() ?? ""; 27 | return GetImageFromFilePath(first); 28 | } 29 | else if (value is string s) 30 | { 31 | try 32 | { 33 | return GetImageFromFilePath(s); 34 | } 35 | catch (ArgumentNullException) 36 | { 37 | return DependencyProperty.UnsetValue; 38 | } 39 | } 40 | else 41 | { 42 | return DependencyProperty.UnsetValue; 43 | } 44 | } 45 | 46 | private static BitmapSource GetImageFromFilePath(string path) 47 | { 48 | return NativeMethods.GetSmallIcon(path); 49 | } 50 | 51 | /// 52 | /// This is not implemented. Returns . 53 | /// 54 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 55 | { 56 | return DependencyProperty.UnsetValue; 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/FilePathToNameConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Linq; 5 | using System.Windows.Data; 6 | using System.IO; 7 | using System.Windows; 8 | 9 | namespace SolidShineUi.Utils 10 | { 11 | 12 | /// 13 | /// Convert a fully-qualified path to a file into just displaying the filename, for use in XAML. 14 | /// 15 | public class FilePathToNameConverter : IValueConverter 16 | { 17 | /// 18 | /// Convert a file's full path to only display the filename. 19 | /// 20 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 21 | { 22 | if (value is IEnumerable ie) 23 | { 24 | string first = ie.FirstOrDefault() ?? ""; 25 | return GetFileNameFromFullPath(first); 26 | } 27 | else if (value is string s) 28 | { 29 | return GetFileNameFromFullPath(s); 30 | } 31 | else 32 | { 33 | return DependencyProperty.UnsetValue; 34 | } 35 | } 36 | 37 | private static string GetFileNameFromFullPath(string path) 38 | { 39 | return Path.GetFileName(path); 40 | } 41 | 42 | /// 43 | /// This is not implemented. Returns . 44 | /// 45 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 46 | { 47 | return DependencyProperty.UnsetValue; 48 | } 49 | 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/GradientStopItem.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | 17 | M 1,1 L 29,1 L 29,24 15,39 L 1,24 1,1 29,1 18 | 19 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/MultilineStringInputDialog.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/PartialCornerRadiusConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Data; 4 | using System.Windows; 5 | 6 | namespace SolidShineUi.Utils 7 | { 8 | /// 9 | /// A helper method for WPF controls, to only selectively apply a value to only some corners. 10 | /// 11 | public class PartialCornerRadiusConverter : IValueConverter 12 | { 13 | 14 | /// 15 | /// Modify a to only apply to a few corners, as based upon the values in . 16 | /// 17 | /// The object to read from (or a for a uniform value) 18 | /// Not used, returned type will always be a 19 | /// The corners to carry over to the final output; one or more of strings "TL,TR,BL,BR", or a 20 | /// Not used 21 | /// A that only has a portion of its values set 22 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 23 | { 24 | (bool topLeft, bool topRight, bool bottomLeft, bool bottomRight) vals = (false, false, false, false); 25 | CornerRadius baseVal; 26 | 27 | // first discern the value 28 | if (value is double d) 29 | { 30 | baseVal = new CornerRadius(d); 31 | } 32 | else if (value is CornerRadius cr) 33 | { 34 | baseVal = cr; 35 | } 36 | else { return new CornerRadius(); } 37 | 38 | // then discern the parameter 39 | if (parameter is string s) 40 | { 41 | vals = PartialValueHelper.DecodeCornerRadiusPartialValue(s); 42 | } 43 | else if (parameter is byte b) 44 | { 45 | vals = PartialValueHelper.DecodeCornerRadiusPartialValue(b); 46 | } 47 | else 48 | { 49 | return baseVal; 50 | } 51 | 52 | // finally, do the "conversion" 53 | return new CornerRadius(vals.topLeft ? baseVal.TopLeft : 0, vals.topRight ? baseVal.TopRight : 0, vals.bottomRight ? baseVal.BottomRight : 0, vals.bottomLeft ? baseVal.BottomLeft : 0); 54 | } 55 | 56 | /// 57 | /// Converting back is not supported, as there is not a way to return the data that is lost. 58 | /// 59 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 60 | { 61 | return DependencyProperty.UnsetValue; 62 | } 63 | 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/PartialThicknessConverter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Data; 8 | using System.Windows; 9 | 10 | namespace SolidShineUi.Utils 11 | { 12 | /// 13 | /// A helper method for WPF controls, to only selectively apply a value to only some corners. 14 | /// 15 | public class PartialThicknessConverter : IValueConverter 16 | { 17 | 18 | /// 19 | /// Convert a double into a string, with rounding possible by setting the value. 20 | /// 21 | /// The object to read from (or for a uniform value) 22 | /// Not used, returned type will always be a 23 | /// The corners to apply to the result; one or more of L,T,B,R 24 | /// Not used 25 | /// A that only has a portion of its values set 26 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 27 | { 28 | (bool left, bool top, bool right, bool bottom) vals = (false, false, false, false); 29 | Thickness baseVal; 30 | 31 | // first discern the value 32 | if (value is double d) 33 | { 34 | baseVal = new Thickness(d); 35 | } 36 | else if (value is Thickness th) 37 | { 38 | baseVal = th; 39 | } 40 | else { return new Thickness(); } 41 | 42 | // then discern the parameter 43 | if (parameter is string s) 44 | { 45 | vals = PartialValueHelper.DecodeThicknessPartialValue(s); 46 | } 47 | else if (parameter is byte b) 48 | { 49 | vals = PartialValueHelper.DecodeThicknessPartialValue(b); 50 | } 51 | else 52 | { 53 | return baseVal; 54 | } 55 | 56 | // finally, do the "conversion" 57 | return new Thickness(vals.left ? baseVal.Left : 0, vals.top ? baseVal.Top : 0, vals.right ? baseVal.Right : 0, vals.bottom ? baseVal.Bottom : 0); 58 | } 59 | 60 | /// 61 | /// Converting back is not supported, as there is not a way to return the data that is lost. 62 | /// 63 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 64 | { 65 | return DependencyProperty.UnsetValue; 66 | } 67 | 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/RelativePositionSelect.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /SolidShineUi/Utils/TabScrollCommandAction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace SolidShineUi.Utils 6 | { 7 | 8 | /// 9 | /// Represents the scrolling action to take when executing the TabScroll command. 10 | /// 11 | public enum TabScrollCommandAction 12 | { 13 | /// 14 | /// Scroll to the left a set amount. 15 | /// 16 | Left = 0, 17 | /// 18 | /// Scroll to the right a set amount. 19 | /// 20 | Right = 1, 21 | /// 22 | /// Scroll to the very left end. 23 | /// 24 | Home = 2, 25 | /// 26 | /// Scroll to the very right end. 27 | /// 28 | End = 3 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /SolidShineUi/lib/Microsoft.Windows.Shell.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SolidShineUi/lib/Microsoft.Windows.Shell.dll -------------------------------------------------------------------------------- /SsuiSample/About.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SsuiSample/About.xaml.cs: -------------------------------------------------------------------------------- 1 | using SolidShineUi; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Reflection; 5 | using System.Windows; 6 | 7 | namespace SsuiSample 8 | { 9 | /// 10 | /// Interaction logic for About.xaml 11 | /// 12 | public partial class About : FlatWindow 13 | { 14 | public About() 15 | { 16 | InitializeComponent(); 17 | 18 | lblNetVersion.Text = "Running on .NET version " + Environment.Version; 19 | lblSsuiVersion.Text = "For SolidShineUI version " + Assembly.GetAssembly(typeof(FlatWindow)).GetName().Version; 20 | } 21 | 22 | private void btnClose_Click(object sender, RoutedEventArgs e) 23 | { 24 | Close(); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SsuiSample/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /SsuiSample/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | 9 | namespace SsuiSample 10 | { 11 | /// 12 | /// Interaction logic for App.xaml 13 | /// 14 | public partial class App : Application 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SsuiSample/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | [assembly: ThemeInfo( 4 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 5 | //(used if a resource is not found in the page, 6 | // or application resource dictionaries) 7 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 8 | //(used if a resource is not found in the page, 9 | // app, or any theme specific resource dictionaries) 10 | )] 11 | -------------------------------------------------------------------------------- /SsuiSample/ButtonsTest.xaml.cs: -------------------------------------------------------------------------------- 1 | using SolidShineUi; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System.Windows; 6 | using System.Windows.Controls; 7 | using System.Windows.Data; 8 | using System.Windows.Documents; 9 | using System.Windows.Input; 10 | using System.Windows.Media; 11 | using System.Windows.Media.Imaging; 12 | using System.Windows.Navigation; 13 | using System.Windows.Shapes; 14 | 15 | namespace SsuiSample 16 | { 17 | /// 18 | /// Interaction logic for ButtonsTest.xaml 19 | /// 20 | public partial class ButtonsTest : UserControl 21 | { 22 | public ButtonsTest() 23 | { 24 | InitializeComponent(); 25 | } 26 | 27 | #region ColorScheme 28 | 29 | public event DependencyPropertyChangedEventHandler ColorSchemeChanged; 30 | 31 | public static DependencyProperty ColorSchemeProperty 32 | = DependencyProperty.Register("ColorScheme", typeof(ColorScheme), typeof(ButtonsTest), 33 | new FrameworkPropertyMetadata(new ColorScheme(), new PropertyChangedCallback(OnColorSchemeChanged))); 34 | 35 | public static void OnColorSchemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 36 | { 37 | ColorScheme cs = e.NewValue as ColorScheme; 38 | 39 | if (d is ButtonsTest s) 40 | { 41 | s.ColorSchemeChanged?.Invoke(d, e); 42 | s.ApplyColorScheme(cs); 43 | } 44 | } 45 | 46 | public ColorScheme ColorScheme 47 | { 48 | get => (ColorScheme)GetValue(ColorSchemeProperty); 49 | set => SetValue(ColorSchemeProperty, value); 50 | } 51 | 52 | public void ApplyColorScheme(ColorScheme cs) 53 | { 54 | if (cs != ColorScheme) 55 | { 56 | ColorScheme = cs; 57 | return; 58 | } 59 | } 60 | #endregion 61 | 62 | private void Button_Click(object sender, RoutedEventArgs e) 63 | { 64 | txtResult.Text = $"{(sender as FrameworkElement).Name} was clicked"; 65 | } 66 | 67 | private void ToggleButton_Click(object sender, RoutedEventArgs e) 68 | { 69 | FlatButton fb = sender as FlatButton; 70 | txtResult.Text = $"{fb.Name} was clicked. IsSelected = {fb.IsSelected}"; 71 | } 72 | 73 | private void Button_RightClick(object sender, RoutedEventArgs e) 74 | { 75 | txtResult.Text = $"{(sender as FrameworkElement).Name} was right-clicked"; 76 | } 77 | 78 | private void Button_MenuClick(object sender, RoutedEventArgs e) 79 | { 80 | txtResult.Text = $"{(sender as FrameworkElement).Name} was clicked on the menu"; 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /SsuiSample/CheckBoxTest.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 28 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /SsuiSample/CheckBoxTest.xaml.cs: -------------------------------------------------------------------------------- 1 | using SolidShineUi; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System.Windows; 6 | using System.Windows.Controls; 7 | using System.Windows.Data; 8 | using System.Windows.Documents; 9 | using System.Windows.Input; 10 | using System.Windows.Media; 11 | using System.Windows.Media.Imaging; 12 | using System.Windows.Navigation; 13 | using System.Windows.Shapes; 14 | 15 | namespace SsuiSample 16 | { 17 | /// 18 | /// Interaction logic for CheckBoxTest.xaml 19 | /// 20 | public partial class CheckBoxTest : UserControl 21 | { 22 | public CheckBoxTest() 23 | { 24 | InitializeComponent(); 25 | } 26 | 27 | #region ColorScheme 28 | 29 | public event DependencyPropertyChangedEventHandler ColorSchemeChanged; 30 | 31 | public static DependencyProperty ColorSchemeProperty 32 | = DependencyProperty.Register("ColorScheme", typeof(ColorScheme), typeof(CheckBoxTest), 33 | new FrameworkPropertyMetadata(new ColorScheme(), new PropertyChangedCallback(OnColorSchemeChanged))); 34 | 35 | public static void OnColorSchemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 36 | { 37 | ColorScheme cs = e.NewValue as ColorScheme; 38 | 39 | if (d is CheckBoxTest s) 40 | { 41 | s.ColorSchemeChanged?.Invoke(d, e); 42 | s.ApplyColorScheme(cs); 43 | } 44 | } 45 | 46 | public ColorScheme ColorScheme 47 | { 48 | get => (ColorScheme)GetValue(ColorSchemeProperty); 49 | set => SetValue(ColorSchemeProperty, value); 50 | } 51 | 52 | public void ApplyColorScheme(ColorScheme cs) 53 | { 54 | if (cs != ColorScheme) 55 | { 56 | ColorScheme = cs; 57 | return; 58 | } 59 | } 60 | #endregion 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /SsuiSample/DialogsTest.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /SsuiSample/FileSelectTest.xaml.cs: -------------------------------------------------------------------------------- 1 | using SolidShineUi; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.IO; 5 | using System.Windows; 6 | using System.Windows.Controls; 7 | using System.Windows.Media; 8 | using System.Windows.Media.Imaging; 9 | 10 | namespace SsuiSample 11 | { 12 | /// 13 | /// Interaction logic for FileSelectTest.xaml 14 | /// 15 | public partial class FileSelectTest : UserControl 16 | { 17 | public FileSelectTest() 18 | { 19 | InitializeComponent(); 20 | } 21 | 22 | #region ColorScheme 23 | 24 | public event DependencyPropertyChangedEventHandler ColorSchemeChanged; 25 | 26 | public static DependencyProperty ColorSchemeProperty 27 | = DependencyProperty.Register("ColorScheme", typeof(ColorScheme), typeof(FileSelectTest), 28 | new FrameworkPropertyMetadata(new ColorScheme(), new PropertyChangedCallback(OnColorSchemeChanged))); 29 | 30 | public static void OnColorSchemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 31 | { 32 | ColorScheme cs = e.NewValue as ColorScheme; 33 | 34 | if (d is FileSelectTest s) 35 | { 36 | s.ColorSchemeChanged?.Invoke(d, e); 37 | s.ApplyColorScheme(cs); 38 | } 39 | } 40 | 41 | public ColorScheme ColorScheme 42 | { 43 | get => (ColorScheme)GetValue(ColorSchemeProperty); 44 | set => SetValue(ColorSchemeProperty, value); 45 | } 46 | 47 | public void ApplyColorScheme(ColorScheme cs) 48 | { 49 | if (cs != ColorScheme) 50 | { 51 | ColorScheme = cs; 52 | return; 53 | } 54 | } 55 | 56 | 57 | #endregion 58 | 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /SsuiSample/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | // This file is used by Code Analysis to maintain SuppressMessage 2 | // attributes that are applied to this project. 3 | // Project-level suppressions either have no target or are given 4 | // a specific target and scoped to a namespace, type, member, etc. 5 | 6 | using System.Diagnostics.CodeAnalysis; 7 | 8 | [assembly: SuppressMessage("Usage", "CA2211:Non-constant fields should not be visible", Justification = "Doesn't matter in application")] 9 | [assembly: SuppressMessage("Style", "IDE0090:Use 'new(...)'", Justification = "Cannot use as older C# versions (i.e. .NET Framework) does not support this pattern.")] 10 | -------------------------------------------------------------------------------- /SsuiSample/PositionSelectTest.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using SolidShineUi; 9 | 10 | namespace SsuiSample 11 | { 12 | /// 13 | /// Interaction logic for RelativePositionSelectTest.xaml 14 | /// 15 | public partial class PositionSelectTest : UserControl 16 | { 17 | public PositionSelectTest() 18 | { 19 | InitializeComponent(); 20 | } 21 | 22 | #region ColorScheme 23 | 24 | public event DependencyPropertyChangedEventHandler ColorSchemeChanged; 25 | 26 | public static DependencyProperty ColorSchemeProperty 27 | = DependencyProperty.Register("ColorScheme", typeof(ColorScheme), typeof(PositionSelectTest), 28 | new FrameworkPropertyMetadata(new ColorScheme(), new PropertyChangedCallback(OnColorSchemeChanged))); 29 | 30 | public static void OnColorSchemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 31 | { 32 | ColorScheme cs = e.NewValue as ColorScheme; 33 | 34 | if (d is PositionSelectTest s) 35 | { 36 | s.ColorSchemeChanged?.Invoke(d, e); 37 | s.ApplyColorScheme(cs); 38 | } 39 | } 40 | 41 | public ColorScheme ColorScheme 42 | { 43 | get => (ColorScheme)GetValue(ColorSchemeProperty); 44 | set => SetValue(ColorSchemeProperty, value); 45 | } 46 | 47 | public void ApplyColorScheme(ColorScheme cs) 48 | { 49 | if (cs != ColorScheme) 50 | { 51 | ColorScheme = cs; 52 | return; 53 | } 54 | } 55 | 56 | 57 | #endregion 58 | 59 | bool _internalAction = false; 60 | 61 | private void nudWidth1_ValueChanged(object sender, DependencyPropertyChangedEventArgs e) 62 | { 63 | if (_internalAction) return; 64 | 65 | selPos1.SelectedWidth = nudWidth1.Value; 66 | } 67 | 68 | private void nudHeight1_ValueChanged(object sender, DependencyPropertyChangedEventArgs e) 69 | { 70 | if (_internalAction) return; 71 | 72 | selPos1.SelectedHeight = nudHeight1.Value; 73 | } 74 | 75 | private void selPos1_SelectedPositionChanged(object sender, EventArgs e) 76 | { 77 | if (nudHeight1 == null) return; 78 | 79 | _internalAction = true; 80 | 81 | nudHeight1.Value = selPos1.SelectedHeight; 82 | nudWidth1.Value = selPos1.SelectedWidth; 83 | 84 | _internalAction = false; 85 | } 86 | 87 | private void chkSnap_CheckChanged(object sender, RoutedEventArgs e) 88 | { 89 | selPos1.SnapToSnapLines = chkSnap.IsChecked; 90 | } 91 | 92 | private void nudSnapsize_ValueChanged(object sender, DependencyPropertyChangedEventArgs e) 93 | { 94 | selPos1.SnapDistance = nudSnapsize.Value; 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /SsuiSample/Resources/Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SsuiSample/Resources/Icon.ico -------------------------------------------------------------------------------- /SsuiSample/Resources/Images/ImageColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SsuiSample/Resources/Images/ImageColor.png -------------------------------------------------------------------------------- /SsuiSample/Resources/Images/SmileyColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JaykeBird/ssui/e56d8fa42f65fcec48026eb00ae673919d8d577a/SsuiSample/Resources/Images/SmileyColor.png -------------------------------------------------------------------------------- /SsuiSample/Resources/SeparatorItem.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /SsuiSample/Resources/SeparatorItem.xaml.cs: -------------------------------------------------------------------------------- 1 | using SolidShineUi; 2 | 3 | namespace SsuiSample.Resources 4 | { 5 | /// 6 | /// Interaction logic for SeparatorItem.xaml 7 | /// 8 | public partial class SeparatorItem : SelectableUserControl 9 | { 10 | public SeparatorItem() 11 | { 12 | InitializeComponent(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SsuiSample/SelectPanelScrollTest.xaml.cs: -------------------------------------------------------------------------------- 1 | using SolidShineUi; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Navigation; 15 | using System.Windows.Shapes; 16 | 17 | namespace SsuiSample 18 | { 19 | /// 20 | /// Interaction logic for SelectPanelScrollTest.xaml 21 | /// 22 | public partial class SelectPanelScrollTest : UserControl 23 | { 24 | public SelectPanelScrollTest() 25 | { 26 | InitializeComponent(); 27 | } 28 | 29 | #region ColorScheme 30 | 31 | public event DependencyPropertyChangedEventHandler ColorSchemeChanged; 32 | 33 | public static DependencyProperty ColorSchemeProperty 34 | = DependencyProperty.Register("ColorScheme", typeof(ColorScheme), typeof(SelectPanelScrollTest), 35 | new FrameworkPropertyMetadata(new ColorScheme(), new PropertyChangedCallback(OnColorSchemeChanged))); 36 | 37 | public static void OnColorSchemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 38 | { 39 | ColorScheme cs = e.NewValue as ColorScheme; 40 | 41 | if (d is SelectPanelScrollTest s) 42 | { 43 | s.ColorSchemeChanged?.Invoke(d, e); 44 | s.ApplyColorScheme(cs); 45 | } 46 | } 47 | 48 | public ColorScheme ColorScheme 49 | { 50 | get => (ColorScheme)GetValue(ColorSchemeProperty); 51 | set => SetValue(ColorSchemeProperty, value); 52 | } 53 | 54 | public void ApplyColorScheme(ColorScheme cs) 55 | { 56 | if (cs != ColorScheme) 57 | { 58 | ColorScheme = cs; 59 | return; 60 | } 61 | } 62 | 63 | #endregion 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /SsuiSample/SpinnersTest.xaml.cs: -------------------------------------------------------------------------------- 1 | using SolidShineUi; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System.Windows; 6 | using System.Windows.Controls; 7 | using System.Windows.Data; 8 | using System.Windows.Documents; 9 | using System.Windows.Input; 10 | using System.Windows.Media; 11 | using System.Windows.Media.Imaging; 12 | using System.Windows.Navigation; 13 | using System.Windows.Shapes; 14 | 15 | namespace SsuiSample 16 | { 17 | /// 18 | /// Interaction logic for SpinnersTest.xaml 19 | /// 20 | public partial class SpinnersTest : UserControl 21 | { 22 | public SpinnersTest() 23 | { 24 | InitializeComponent(); 25 | } 26 | 27 | #region ColorScheme 28 | 29 | public event DependencyPropertyChangedEventHandler ColorSchemeChanged; 30 | 31 | public static DependencyProperty ColorSchemeProperty 32 | = DependencyProperty.Register("ColorScheme", typeof(ColorScheme), typeof(SpinnersTest), 33 | new FrameworkPropertyMetadata(new ColorScheme(), new PropertyChangedCallback(OnColorSchemeChanged))); 34 | 35 | public static void OnColorSchemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 36 | { 37 | ColorScheme cs = e.NewValue as ColorScheme; 38 | 39 | if (d is SpinnersTest s) 40 | { 41 | s.ColorSchemeChanged?.Invoke(d, e); 42 | s.ApplyColorScheme(cs); 43 | } 44 | } 45 | 46 | public ColorScheme ColorScheme 47 | { 48 | get => (ColorScheme)GetValue(ColorSchemeProperty); 49 | set => SetValue(ColorSchemeProperty, value); 50 | } 51 | 52 | public void ApplyColorScheme(ColorScheme cs) 53 | { 54 | if (cs != ColorScheme) 55 | { 56 | ColorScheme = cs; 57 | return; 58 | } 59 | } 60 | 61 | #endregion 62 | 63 | private void nud9_ValueChanged(object sender, DependencyPropertyChangedEventArgs e) 64 | { 65 | brdrColor.Background = new SolidColorBrush(ColorsHelper.CreateFromHex(nud9.Value.ToString("X6"))); 66 | } 67 | 68 | private void nud9_Loaded(object sender, RoutedEventArgs e) 69 | { 70 | brdrColor.Background = new SolidColorBrush(ColorsHelper.CreateFromHex(nud9.Value.ToString("X6"))); 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /SsuiSample/SsuiSample.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | WinExe 5 | net4.8;net6.0-windows;net8.0-windows10.0.19041.0 6 | true 7 | ..\Icons\Icon.ico 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 27 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /SsuiSample/TwoBasicSelectPanels.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /SsuiSample/TwoBasicSelectPanels.xaml.cs: -------------------------------------------------------------------------------- 1 | using SolidShineUi; 2 | using System; 3 | using System.Linq; 4 | using System.Collections.Generic; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Collections.ObjectModel; 9 | 10 | namespace SsuiSample 11 | { 12 | /// 13 | /// Interaction logic for TwoBasicSelectPanels.xaml 14 | /// 15 | public partial class TwoBasicSelectPanels : UserControl 16 | { 17 | public TwoBasicSelectPanels() 18 | { 19 | InitializeComponent(); 20 | 21 | // the second SelectPanel, basic2, serves as a way to test ItemsSource with a stored SelectableCollection 22 | // for testing/trying with a SelectableCollectionView, uncomment the below text 23 | 24 | //var lcv = new SelectableCollectionView((Collection)Resources["selList"]); 25 | //lcv.SortDescriptions.Add(new System.ComponentModel.SortDescription("Text", System.ComponentModel.ListSortDirection.Ascending)); 26 | //basic2.ItemsSource = lcv; 27 | } 28 | 29 | #region ColorScheme 30 | 31 | public event DependencyPropertyChangedEventHandler ColorSchemeChanged; 32 | 33 | public static DependencyProperty ColorSchemeProperty 34 | = DependencyProperty.Register("ColorScheme", typeof(ColorScheme), typeof(TwoBasicSelectPanels), 35 | new FrameworkPropertyMetadata(new ColorScheme(), new PropertyChangedCallback(OnColorSchemeChanged))); 36 | 37 | public static void OnColorSchemeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 38 | { 39 | ColorScheme cs = e.NewValue as ColorScheme; 40 | 41 | if (d is TwoBasicSelectPanels s) 42 | { 43 | s.ColorSchemeChanged?.Invoke(d, e); 44 | s.ApplyColorScheme(cs); 45 | } 46 | } 47 | 48 | public ColorScheme ColorScheme 49 | { 50 | get => (ColorScheme)GetValue(ColorSchemeProperty); 51 | set => SetValue(ColorSchemeProperty, value); 52 | } 53 | 54 | public void ApplyColorScheme(ColorScheme cs) 55 | { 56 | if (cs != ColorScheme) 57 | { 58 | ColorScheme = cs; 59 | return; 60 | } 61 | } 62 | 63 | 64 | #endregion 65 | 66 | private void btnAdd_Click(object sender, RoutedEventArgs e) 67 | { 68 | basic1.Items.Add(new SelectableItem("TEXT")); 69 | } 70 | 71 | private void btnAddRight_Click(object sender, RoutedEventArgs e) 72 | { 73 | var list = (SelectableListItemCollection)Resources["selList"]; 74 | list.Add(new SelectableItem("TEXT")); 75 | } 76 | 77 | private void btnClear_Click(object sender, RoutedEventArgs e) 78 | { 79 | basic1.Items.Clear(); 80 | 81 | var list = (SelectableListItemCollection)Resources["selList"]; 82 | list.Clear(); 83 | } 84 | } 85 | 86 | // WPF's XAML doesn't support generics, so this is just a basic wrapper so that I can use it as a Resource in XAML 87 | internal class SelectableListItemCollection : SelectableCollection 88 | { 89 | 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /SsuiSample/WildcardMatchTest.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /SsuiWindows11Interop/FlatWindowInterop.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.UI.Windowing; 2 | using System.Windows.Interop; 3 | //using Windows.UI.WindowManagement; 4 | 5 | namespace SsuiWindows11Interop 6 | { 7 | public static class FlatWindowInterop 8 | { 9 | // while in theory this code should work, my issue is that I'm not able to properly test it 10 | // as I encounter a bug when trying to run a WPF app that references the Windows App SDK: 11 | // https://github.com/microsoft/WindowsAppSDK/issues/3410 12 | 13 | /// 14 | /// Use Windows 11's own caption buttons for the corner of the window, rather than Solid Shine UI's caption buttons. 15 | /// 16 | /// The window to update. 17 | /// 18 | /// This tells Windows to render the Windows 11 caption buttons in the corner (the minimize/maximize/close buttons), 19 | /// which can then benefit from built-in Windows 11 features like the Snap regions under the Maximize button, as well 20 | /// as just fitting in better with how a standard window looks in Windows 11. 21 | /// This then tells the FlatWindow itself to not render its own caption buttons, since we're using the Windows 11 ones. 22 | /// 23 | /// This requires getting the window's handle, so it's best to use this in the window's SourceInitialized event handler. 24 | /// 25 | public static void RenderWindowsCaptionButtons(this FlatWindow w) 26 | { 27 | if (!AppWindowTitleBar.IsCustomizationSupported()) return; 28 | 29 | WindowInteropHelper wih = new WindowInteropHelper(w); 30 | IntPtr hwnd = wih.EnsureHandle(); 31 | 32 | // Retrieve the WindowId that corresponds to hWnd. 33 | Microsoft.UI.WindowId wid = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(hwnd); 34 | AppWindow appWindow = AppWindow.GetFromWindowId(wid); 35 | 36 | appWindow.TitleBar.ExtendsContentIntoTitleBar = true; 37 | w.CaptionDisplayType = CaptionType.None; 38 | } 39 | 40 | } 41 | } -------------------------------------------------------------------------------- /SsuiWindows11Interop/SsuiWindows11Interop.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0-windows10.0.22000.0 5 | enable 6 | enable 7 | win10-x64;win10-x86;win10-arm64 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | --------------------------------------------------------------------------------