├── .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 |
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 |
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 |
--------------------------------------------------------------------------------