Releases: JaykeBird/ssui
Version 1.9.8 - Font weights and split buttons!
Well, here we are! Turns out one of the changes I made for 1.9.7 caused the FontSelectDialog to cause program crashes. Soooo that's not great.
I figured that while I was taking the time to make changes to the FontSelectDialog for this, I would also add in a few more things that I could backport from 2.0. This did end up creating some breaking changes, but I think the net positive makes it all worth it.
After this, my focus is back to working on version 2.0. I'm still aiming to release it in the first half of 2024, but it probably won't be before April, let's be realistic. But I am still making progress! I did have to take a short break to avoid burnout though (and also to care for a medical issue our pet dog was dealing with lol). But hopefully now I'll be good to focus more time on programming now!
Consume the library
🍔🍦
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.7.1 and 4.8, .NET 6, and .NET 7!
- Build it yourself from code!
Breaking Changes
FlatButton
'sIsSelectedChanged
event is changed to use SolidShineUi'sItemSelectionChangedEventHandler
(rather thanDependencyPropertyChangedEventHandler
). The only change you'll need to do will be updating the actual method definitions as follows:- Change
myButton_IsSelectionChanged(object sender, DependencyPropertyChangedEventArgs e)
tomyButton_IsSelectionChanged(object sender, ItemSelectionChangedEventArgs e)
- Change
SelectableUserControl
'sIsSelectedChanged
event is changed to useSolidShineUi.ItemSelectionChangedEventHandler
, rather thanSolidShineUi.SelectableUserControl.ItemSelectionChangedEventHandler
- no functional difference, just easier to type!- The obsolete SelectionChanged event is still using the old event handler delegate
SelectableUserControl
's Click event and RightClick event have been changed to routed events - if you listen to these events, make sure to update your listeners to useRoutedEventArgs
andRoutedEventHandler
- The Items and ItemsSource properties in SelectPanel are changed to an enumerable/collection of
IClickSelectableControl
, rather thanSelectableUserControl
- If you refer to these properties' types, you'll have to change them to
IEnumerable<IClickSelectableControl>
orSelectableCollection<IClickSelectableControl>
- This also affects the type of
SelectPanel.Items.SelectedItems
- this is also nowReadOnlyCollection<IClickSelectableControl>
IClickSelectableControl
has a notably smaller set of methods/properties than a UserControl (such as SelectableUserControl); if you need to access a method or property not inIClickSelectableControl
, you'll need to cast to aSelectableUserControl
or whatever type is relevant for you
- If you refer to these properties' types, you'll have to change them to
- Most
IValueConverter
objects in SolidShineUi now returnDependencyProperty.UnsetValue
when an invalid value is passed in, rather than returning null or throwing an exception- This seems to be more in line with what's expected from IValueConverters in WPF
Reminders for version 2.0
For version 2.0, here's some info to keep in mind. I'm trying to avoid too drastic of breaking changes, but there's no better time to introduce such changes than in a major version number increase like this.
So that in mind, keep this handy for when version 2.0 ends up dropping:
- Support for .NET Core 3.1 will be dropped in version 2.0. I suggest upgrading to .NET 6 or .NET 8, the new LTS releases.
ExperimentalPropertyList
will be renamed to justPropertyList
ISelectableCollectionSource
is being renamed to justISelectableCollection
- The obsolete methods in SelectPanel and MessageDialog will be removed - please adjust to the suggested replacements
The breaking changes in this version are all stuff backported from 2.0, so if you adjust to these changes here, it'll be less to transition when you upgrade to 2.0!
Changelog
- Rewrote how
FontSelectDialog
handles font weight- Font weight is now displayed and stored as an integer, rather than just being a list of items to select from
- This way, more fine weight control is possible - for the few fonts that actually support this
- With this, the crashes and issues present in 1.9.7 are no longer present
- Added more buttons!
- Backported from 2.0
- FlatRepeatButton
- Like a regular FlatButton, but its Execute event continues to activate while you're holding the button down
- Also has PressBegan and PressEnded events too
- And it also supports commands for all of these!
- SplitButton
- Basically a FlatButton and MenuButton smashed into one! Click the main button on the left for the primary action, or click on the menu to display additional options.
- A staple for more advanced UI designs, in my eyes, but it is surprisingly not present in WPF
- Feels like it covers everything needed of a split button, but if I have ideas of what more to do with it later, I'll add it after 2.0
- Added
IClickSelectableCollection
interface- Backported from 2.0
FlatButton
,MenuButton
,SplitButton
, andSelectableUserControl
all follow this interface- If you build a control or UserControl that implements this interface, it can be used with SelectPanel! - you no longer need to build from
SelectableUserControl
- Changes to SelectPanel, SelectableUserControl
- SelectPanel's Items property is now a collection of
IClickSelectableControl
, rather thanSelectableUserControl
- This provides more flexibility for other developers to build controls that can be used with SelectPanel
- SelectableUserControl's Click and RightClick events are now routed events
- SelectPanel's Items property is now a collection of
- Other changes
FlatButton
'sIsSelectedChanged
event args has changed - see the breaking changes section- Most WPF converters (
IValueConverter
objects) now returnDependencyProperty.UnsetValue
when an invalid value is passed on- Rather than returning null or throwing an exception
- This seems to be more in line with what's expected with WPF, although I don't think WPF itself always adheres to this
- Hidden tabs in TabControl will now also be hidden in the tab list menu
- Minor change to
AutoCompleteBehavior
to quick-exit if we already have a suggested string - New WPF value converters:
PartialThicknessConverter
andPartialCornerRadiusConverter
- Use this to select which edges or corners of an element to apply a uniform Thickness or CornerRadius value onto
- Pass in the Thickness or CornerRadius as the value, and pass a filter value as the converter parameter (which can be a string of a comma-separated list of edges/corners)
- Use
PartialValueHelper
if you need assistance on getting the filter values - Used with SplitButton, but may have other uses in more controls
- Font weight is now displayed and stored as an integer, rather than just being a list of items to select from
Version 1.9.7 - Solid Shine UI on more .NET versions!
Hello! Wasn't expecting another one of these 1.9.x releases, were you? Me neither!
There is a known issue with this release's FontSelectDialog. If you rely upon this dialog, please revert back to 1.9.6. A new update will be made in the coming days.
Background
So, here's the rundown. I have an internal list of items that I want to achieve for version 2.0 - the list is locked in, to prevent feature creep (which I've been known to do, see 1.9.5's release notes). But… I'm not going to be able to accomplish all the things on that list for November. Clearly, we're already in December now, and I still have a decent bit more to do!
I'm not wanting to break up 2.0 into multiple smaller releases, since a lot of the new features depend upon each other and I want to avoid multiple annoying breaking change releases in a row. So instead, I've now delayed version 2.0's release to occur sometime in the first half of 2024; ideally, towards the beginning portion of that half.
But I've also been making various improvements and bug fixes to the code as I go along, and I didn't want to sit on not releasing those for (even more) months. Also, I wanted to include support for that new, shiny .NET 8! Sooo, this is the solution today: another 1.9.x release.
About this release
Luckily, though, this is more than just another smaller bug fix release! I was able to pull out one feature from 2.0 that doesn't really depend upon anything else: the Transform editor for the PropertyList control! WPF Transforms are used to modify how an element/control is rendered - such as rotating it, making it skewed or scaled up in size, and more. I've definitely accidentally rotated controls in Visual Studio's WPF designer more times than I can count… but now you can rotate and transform them on purpose using the PropertyList!
Another major thing that I did, more primarily just to challenge myself than anything else, is I went through the code and added in support for much older .NET Framework releases. Even all the way back to .NET Framework 4.0! Honestly, adding support for .NET Framework 4.6.1 and 4.5 was relatively easy… the real challenge was .NET Framework 4.0. But I did it, and without any tangible loss of features or functionality! And with only a small handful of hair-pulling headaches.
(scroll down for the full changelog)
Anyway, now that this is out and into the world, I'm going to go back to my continuing work on version 2.0! You can see my progress on version 2.0 right here on GitHub, and also the occasional coding stream that I've done. I apologize for the delay with getting 2.0 done, but I'm looking forward to showing it all off once it is complete! Once I have more to share about that new release date, I'll post about it on Mastodon.
In the meantime, I hope that you enjoy this release.
Things to keep in mind for version 2.0
Even though 2.0 has been delayed until next year, here's some info to keep in mind, in preparation of it coming next year. I'm trying to avoid too drastic of breaking changes, but there's no better time to introduce such changes than in a major version number increase like this.
So that in mind, keep this handy for when version 2.0 ends up dropping:
- Support for .NET Core 3.1 will be dropped in version 2.0. I suggest upgrading to .NET 6 or .NET 8, the new LTS releases.
- ExperimentalPropertyList will be renamed to just PropertyList
- ISelectableCollectionSource is being renamed to just ISelectableCollection
- Methods and classes that are marked as "Obsolete" in this version will be removed in version 2.0
I mentioned previously that support for .NET 5 will be dropped in version 2.0, but I've since went back on that! .NET 5 support will continue, even if it is no longer supported/updated by Microsoft, simply because I currently don't have any .NET 6+ exclusive code that would benefit from dropping .NET 5 support.
Tribute to Office 97
The version number 1.9.7 made me think of Microsoft Office 97, and so as a result, I decided to have a bit of fun and try to create a logo for Solid Shine UI in the style of Office 97 (as shown on the About box). I mostly drew inspiration from the Access 97 logo, but used a stylized letter like Word 97 does.
Office 97 just turned 27 years old last month (it actually released in November 1996). Office 97, and in particular Word 97, is really special to me because this was where I first cut my teeth on programming years and years ago. I enjoyed messing with the VBA code and macros in Word 97, although it took years before I finally properly understood what the text I typed in actually meant. But it was great and was very formative.
Since then, Microsoft Office has really fascinated me, and I could ramble about it for quite some time, but at least in this little moment, I wanted to do something small to honor the particular version that brought me so much inspiration.
Known Issue
- There is a known issue with the FontSelectDialog in this release, due to the changes in how I handle font weights. If you need this dialog, I recommend staying with 1.9.6 for now. I'll be working on a 1.9.8 release to come out soon.
Consume the library
🍔
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.0, 4.5, 4.6,1, 4.7.1 and 4.8, .NET Core 3.1, .NET 5, .NET 6, .NET 7, and .NET 8!
- Build it yourself from code!
Full changelog
- Added TransformEditDialog and TransformEditor for PropertyList
- Can edit all of the in-box WPF transform types
- Includes a single-edit mode for situations where only a specific transform type is allowed
- Also includes the ability to edit transforms for Brushes in the BrushEditor
- Backported from the 2.0 branch (but I may continue to refine for the 2.0 release)
- Added support for .NET 8, and .NET Framework 4, 4.5, and 4.6.1
- Minus a performance/convenience hit with PropertyList.RegisteredPropertyEditors with .NET Framework 4, all features are present and working for these new (and old) frameworks!
- For version 2.0 of SSUI, I will continue support for .NET Framework 4.6.1, and .NET 5
- .NET Core 3.1, .NET Framework 4, and .NET Framework 4.5 will not be supported moving forward with 2.0
- SSUI does work on Windows XP with .NET Framework 4! Do note that some VMs do not support WPF programs very well when hardware acceleration is enabled
- Improvements to SelectPanel
- SelectPanel now handles selection as expected while using ItemsSource
- MoveItemUp and MoveItemDown functions now work while using ItemsSource - as long as ItemsSource is bound to an IList object
- Created non-generic version of ISelectableCollectionSource. This is behind the aforementioned improvements
- If you create your own collection that implements ISelectableCollectionSource<T>, you should also implement the non-generic version too
- Improvements to SelectableUserControl
- This is the base class that you should inherit to use with SelectPanel
- (Otherwise, if you need something relatively basic to just put in the SelectPanel, you can use the SelectableItem control)
- Added IsSelectedChanged event - to be more consistent with FlatButton, and to prepare for version 2.0
- The SelectionChanged event is now marked Obsolete - please move to using IsSelectedChanged if you're listening to this event. In 2.0, SelectionChanged will be removed
- Added SelectOnClick property - if false, clicking on the control won't change its selection state (although SelectableItem's checkbox still works)
- This is the base class that you should inherit to use with SelectPanel
- Improvements to PropertyList editors
- Improvements to BrushEditor
- You can now modify a brush's transforms in BrushEditor (as mentioned above)
- BrushEditor now avoids issues when attempting to modify frozen brushes
- Improvements to layout of LinearGradientEditDialog
- Improvements to ImageBrushEditorDialog - rearranged the viewbox and viewport controls, and added a Presets menu to quickly set a few appearance options, and added stability when downloading images from the Internet
- Improvements to BrushEditor when using a high contrast theme
- EnumerableEditor and ListEditor are now both more stable, display more helpful text, and are less inconsistent between the .NET Framework and .NET builds of SSUI
- CornerRadiusEditor and ThicknessEditor now hide the spinners' buttons if less than a certain width
- Minor improvements to DoubleEditor, LongEditor, and CharEditor
- Fixed incorrect text for describing ShowReadOnlyProperties and made other documentation improvements
- Improvements to BrushEditor
- Other improvements/changes
- IsDefault property with FlatButton is confirmed to not work in its current state - I have marked it as obsolete
- Developers that rely upon the IsDefault property will need to stick with the standard WPF button, or engineer a different solution that achieves the same effect
- Added ShowControls property, public SelectStop methods to GradientBar
- Ideally, that will make this more useable for others beyond what I do with it in Solid Shine UI
- Other minor performance improvements made to GradientBar as well
- Stability and readability improvements to IconSizeConverter
- Improvements to CheckBox in most situations when using a high contrast theme
- TabControl's tab list menu now uses the Foreground color for the arrow glyph
- Minor change as to when FlatWindow applies its WindowChrome values (now at construction, rather than...
- IsDefault property with FlatButton is confirmed to not work in its current state - I have marked it as obsolete
Version 1.9.6 - small bug fix release!
Hello! This is just a small little bugfix release for Solid Shine UI, before work really begins on version 2.0!
I did not notice that during 1.9.5's development, somehow a dependency on Microsoft.NetCore.Platforms was added. I don't know what that NuGet package does, nor do I really need it... so it's been removed! Hopefully it being there didn't affect people too badly.
Other than that, it's just a few small things here.
Before we move on to the proper change log, allow me to run through my plan for Solid Shine UI for this year. So after this release (as long as I have no more bug fixes to publish), I'm going to go back to finishing up my break away from this project until the end of this month. In May, I'll be back to start work on version 2.0! … Which is slated for later this year. Version 2.0 will probably be the only other release this year for Solid Shine UI, which is fine because it's going to be a big release.
As a part of that, as a final reminder, .NET Core 3.1 and .NET 5 will not be supported in version 2.0. Support will continue for .NET 6, .NET 7, .NET 8, and .NET Framework 4.7.1 and 4.8. I know I've mentioned it a lot already; I just want to use every chance I have to reiterate it, just in case.
Consume the library
🍔
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.7.1 and 4.8, .NET Core 3.1, .NET 5, .NET 6, and .NET 7!
- Build it yourself from code!
Changelog
- Properly fixed "AllowParentScrolling" function in SelectPanel
- Add LoadFromType function to CommandKeyAction, to create a list of key actions from a type's static command list (such as ApplicationCommands)
- Set-only properties are now quickly skipped over in the PropertyList control
- PropertyList never really supported set-only properties to begin with, but now they're explicitly unsupported
- (Get-only properties are supported just fine)
- Removed dependency on "Microsoft.NetCore.Platforms"
Version 1.9.5 - Lists, validations, and icons!
This is planned to be the last release in the 1.9 series! Hopefully… as long as no other bugs pop up. 🤞🤞🤞
Anyway, 1.9.5 includes quite a number of new features and changes. I originally expressed plans that this was going to be a smaller release, but I guess I couldn't stop myself! This works out just as well as this will also be the final release that supports .NET Core 3.1 and .NET 5, so I may as well go out (of those platforms) with a bang.
Up next will be Solid Shine UI version 2.0! This will only support .NET 6, .NET 7, and .NET Framework 4.7.1 and 4.8. It will also contain a number of very fun features and some major changes to the code. One of the biggest changes will be me retiring the ColorScheme class, and replacing it with a new UiTheme class. Of course, you're going to see some new controls too and an initial port to AvaloniaUI. There's a lot to get done in 2.0, so it'll probably be a while before you see it release. I may even put out some beta releases in the run-up to the full 2.0 release! We'll see.
I'm also going to address something here that I've been working on for some time for this release, to no avail: Solid Shine UI does not support displaying the little Snap Layouts pop-up underneath the Maximize button of SSUI's windows in Windows 11. This is a feature I've wanted to implement in one way or another, but I've run into issues with every solution for getting it to work so far. Maybe something will change with this in version 2.0, but don't hold your breath.
Anyway, here's the stuff that is in this release:
Consume the library
🍔
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.7.1 and 4.8, .NET Core 3.1, .NET 5, .NET 6, and .NET 7!
- Build it yourself from code!
Breaking Changes
Breaking changes in 1.9.5:
- The function
ReadSingleBigEndian
was removed from StreamExtensions (it was never used). You'll want to reimplement the function in your code if you need it in the future- Also, StreamExtensions as a whole was marked obsolete and will be removed in 2.0. If you rely upon this class, I recommend copying the source file directly into your own source code.
- The SelectionChanged event for SelectableUserControl has changed to now use ItemSelectionChangedEventArgs, rather than the blank EventArgs. Methods that handle this event will need to make that adjustment
- Implementers of ISelectableCollectionSource will need to implement the CanSelectMultiple property
- If you don't want the property to be changed (i.e. get-only), throw a NotSupportedException in the setter
Also to prepare for Solid Shine UI 2.0, reminder that .NET Core 3.1 and .NET 5 will no longer be supported starting with that release. Also, the control ExperimentalPropertyList
will be renamed to just PropertyList
.
Changelog
- Changes to FlatWindow
- You can display the window icon in the top-left by setting ShowIcon to true
- (By default, this is set to false to maintain appearance with earlier versions; I might change the default to true for version 2.0)
- Single-clicking the icon will display the window's system menu, and a double-click closes the window
- You can still continue to render custom content in the top-left instead by using the TopLeftElement property, and using ShowIcon and ShowTitle to hide items as necessary
- Added CaptionButtonPadding property
- Changing this will change the size of the caption buttons in the top-right
- Added a "None" option for the caption button display
- Setting it to "None" will display no buttons at all in the top-right, not even the close button
- If set to None, you'll need to come up with your own solution for window controls or have Windows render them for you
- Added support for various WPF commands via the FlatWindowCommands class
- Minor visual fixes
- You can display the window icon in the top-left by setting ShowIcon to true
- New control: LongSpinner
- Operates exactly like an IntegerSpinner, but all data is stored as a long (Int64) rather than an int (Int32)
- Changes to PropertyList
- Added DisplayOptions property and a method to hide certain properties from displaying
- By default, properties marked with the PropertyListHide attribute will not appear in the control
- By setting DisplayOptions to ShowOnlyPropertyListShow, PropertyList will only display properties that have a PropertyListShow attribute
- Other options for DisplayOptions include hiding properties that are marked obsolete or not browseable (and an option to just ignore attributes all together and show everything)
- Added ShowReadOnlyProperties property
- If false, hides properties that are read-only (probably kind of obvious given the name)
- By default, this is set to true to match behavior of previous versions
- Add more property editors
- GridLengthEditor - for Grid row/column lengths
- ColorEditor - for WPF Colors
- CornerRadiusEditor - for the corner radius of certain WPF visuals
- LongEditor - for numbers stored as a long or uint
- DecimalEditor - for numbers stored as a decimal
- Added many properties to allow fine-tuning the visuals of the PropertyList
- Brush properties can be used to change the colors/appearance of various parts of the control without using the ColorScheme property
- Label properties can be used to change the text of certain parts of the top panel and toolbar, such as for localization
- (I know this is still far from perfect, but it's better than absolutely nothing)
- Gridlines can be displayed via the ShowGridlines property
- The ShowNameDisplay and ShowTypeDisplay properties can hide the name and type text at the top of the control
- If these are hidden along with all toolbar buttons, you're left with just the list of properties
- Monochrome versions of icons are now used when a high-contrast color scheme is used
- Added PropertyValueChanged and LoadedObjectChanged events
- Fixed nullable-related bugs with FontStyleEditor and ThicknessEditor
- Fixed various bugs and issues with VersionEditor
- Fixed some issues/unexpected behavior involving sorting and filtering
- Added DisplayOptions property and a method to hide certain properties from displaying
- Changes to SelectableItem / ISelectableCollectionSource
- Added CheckboxState and IsCheckboxChecked properties to SelectableItem
- You can now get or set the value of the checkbox in code (making it no longer useless)
- Added MatchCheckboxValueToSelect property to SelectableItem
- When true, checking the checkbox will select the item, and unchecking the checkbox will deselect the item
- Similar to the checkbox functionality in Windows Explorer or other programs
- By default, this is set to true
- SelectableItem's SelectionChanged event now uses a new ItemSelectionChangedEventArgs
- Adds information about how the selection was changed
- Add CanSelectMultiple property to ISelectableCollectionSource
- Changed behavior in SelectPanel to account for these changes
- Added CheckboxState and IsCheckboxChecked properties to SelectableItem
- Add validation check feature to StringInputDialog
- If you specify a ValidationFunction, StringInputDialog will only accept strings if they pass that function
- You can customize the messages that are displayed when validation passes or fails
- This can be good, say, to make sure users input strings that match a certain format or can be parsed in a certain way
- Other changes
- Add MinimumDigitCount property to IntegerSpinner, LongSpinner, and DoubleSpinner
- Numbers will display at least that number of digits, using leading zeroes if necessary
- Thus, if you set the minimum digits to 4 and then enter in the value 16, this is displayed as "0016"
- Setting the minimum to 0 or less will disable the feature
- StreamExtensions class is marked as "Obsolete" and will be removed in version 2.0
- This was never really used in Solid Shine UI and was an artifact from when I was working on color palette file support
- The function
ReadSingleBigEndian
was removed, as it was the only code in the library that had the "unsafe" code block
- Added more functions to ColorsHelper
- Added ToHexStringWithAlpha function, for getting an 8-digit hex string as ARGB, as the existing ToHexString didn't write the alpha value
- Added ToOleColor and CreateFromOle functions to interop with programs (like Office) that use OLE color numbers
- Rewrote ToHexString function
- Changed SelectOnFocus property in ClickSelectTextBox to a dependency property (to allow binding)
- Changed the default colors for SecondHighlightColor and ThirdHighlightColor for an uninitialized ColorScheme
- Now these colors are more visually pleasing in comparison to the rest of them
- Anyone who sets the ColorScheme to a color or uses a method like
CreateLightTheme
will not be affected.
- The
AllowUnsafeCode
setting was turned off for Solid Shine UI, as the only function that used "unsafe" code was removed
- Add MinimumDigitCount property to IntegerSpinner, LongSpinner, and DoubleSpinner
Version 1.9.4 - yay, more bug fixes!
Welp! Here we are again!
I was looking forward to stepping away from this project for a month or so to focus on some other projects, but I noticed some bugs that I figured were important enough to warrant a quick bug fix release. Unlike the 1.9.1 release, there's nothing showstopping here (like an entire dialog not working), but it's a number of small but crucial things that altogether make for a less than stellar experience. So I'd rather get that wrinkled out here and now.
Moving forward, obviously SSUI 2.0 is the big goal for some time next year (probably in the latter half). Looking back over 2021, I'm impressed with how much I accomplished: obviously I've focused a lot on the PropertyList control - it's a huge undertaking that I'm quite proud of - but on top of that, this year also saw me rewrite the SelectPanel control and put a lot of work into TabControl and ColorScheme. I have a lot of ideas for SSUI 2.0 and I'm hopeful I can accomplish many of them, but time will tell. You may also see a 1.9.5 release sometime early next year with some other minor features and polishing.
(Also, reminder: .NET Core 3.1 and .NET 5 support will be dropped in SSUI 2.0. With SSUI 2.0, I'll also be removing a number of properties/functions that I had previously marked obsolete.)
Anyway, release notes:
Consume the library
🍔
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.7.1 and 4.8, .NET Core 3.1, .NET 5, .NET 6, and .NET 7!
- Build it yourself from code!
Changelog
- Clicking on a swatch color in ColorPickerDialog now sets the transparency (alpha) back to 255
- This is the new default behavior, set the property "SwatchesResetTransparency" to false to disable this behavior
- Added property "FileListPadding" to the FileSelect control
- Adds padding between the list of files and the rest of the control, for fine-tuning the layout
- Changes to TabControl
- Changed SelectedTab to a dependency property
- (this also fixes the SelectedTab and CurrentTab property bugs in the .NET Framework versions of the library)
- Added dependency property SelectedTabContent, which is set to… the content of the selected tab
- Used internally to set the content of the control via XAML binding now
- Tab icons are now displayed in the TabControl's tab list menu
- Changed SelectedTab to a dependency property
- Changes to CheckBox
- Changed OnlyAllowCheckBoxClick and TriStateClick properties to dependency properties
- Improved visuals when the OnlyAllowCheckBoxClick property is set to true
- Minor improvements to experience while using CheckBox with an IDE's WPF designer
- Fixed bugs with the ImageBrushEditorDialog
- Null image source is now handled correctly
- Fixed unexpected behavior when selecting an image via the "Select from File" button
- Fixed bug with "From Palette File" tab in ColorPickerDialog
- Fixed unexpected behavior when pressing the Reverse button in the gradient editor dialogs
Version 1.9.3 - brushes and hexes!
I wanted to get a release out around the same time as the new .NET version came out, just like I did last year. Unfortunately, I was also very wanting to get the BrushEditor for my Property List control done for this release, so I had to delay this release a bit beyond the .NET 7 release.
Either way, with the delay, I was also able to add in a number of various features! While the property list control has been my biggest focus, my work on various parts of that control has also lead to me touching on other parts of the library as well. With all of the work done with the Property List control, it's shaping together quite nicely, and so I'm excited to say that it will drop the "Experimental" part of its name in SSUI 2.0! Beyond all the Property List control changes, the other biggest highlights is hexadecimal display support for the IntegerSpinner, and a transparency (alpha) slider for the ColorPickerDialog. Both very nice quality of life features.
I may do a 1.9.4 release later on this year or early next year, but otherwise my goal now is to focus more on version 2.0, planned for some time in 2023!
(Warning: Solid Shine UI 2.0 next year will be dropping support for .NET Core 3.1 and .NET 5. By the time that SSUI 2.0 will be out, .NET Core 3.1 and .NET 5 will be out of Microsoft's support window. Keeping support for these versions frankly isn't too difficult, but it would be slightly easier for me if I did drop them. I'll continue to support .NET 6, 7, and .NET Framework 4.7.1 and 4.8 for the foreseeable future.)
Known Issues
- The "From Palette" tab in ColorPickerDialog currently doesn't select the proper color. A bug fix will be coming. In the meantime, developers should hide the tab by setting
ShowPaletteFileTab
to false. - The ImageBrushEditorDialog (the dialog for setting or changing an ImageBrush on a property) has some unpredictable behavior when the user selects an image via the "Select from File" button. This will be fixed in the next release. In the meantime, the user should attempt to select the image twice (via hitting the button twice) and it should apply the second time.
Changelog
- Added support for .NET 7
- Note that support for .NET Core 3.1 and .NET 5 will be dropping with SolidShineUI 2.0, next year
- Support for .NET Framework 4.7.1 and 4.8 will still continue (along with .NET 6)
- Added "DisplayAsHex" option to IntegerSpinner
- When set to true, the value will be displayed as a hexadecimal number, and you can input hexadecimal numbers
- Can be useful when interacting with computer representations of data
- When set to true, arithmetic expressions are not allowed (even if AcceptExpressions is true)
- New properties and features for ColorPickerDialog
- A transparency (alpha) slider is added at the bottom of the dialog so users can set the alpha value as well
- The slider can be hidden by setting "ShowTransparencyControls" to false
- Added various settings to change the text labels on various parts of the dialog
- Properties like "SwatchesTabTitle" to change the title of the various tabs
- Properties like "OkButtonLabel" to change the text of buttons and other labels
- I will work on more labels in future versions
- A transparency (alpha) slider is added at the bottom of the dialog so users can set the alpha value as well
- Further work with the PropertyList control
- Added more editors for more property types
- VersionEditor - for System.Version objects
- Probably not necessary, but heck, why not add it in? Lol
- Includes the ability to parse in a version string
- FontWeightEditor - for FontWeight objects (i.e. set text to Bold, Light, ExtraBold, etc.)
- Finally being added in
- You can select a value from the drop-down, or type in an OpenType weight class number (select the input method via the three-dots menu)
- CharEditor
- For char objects, and also Rune objects in .NET
- The differences between char and Rune is beyond this changelog here, but suffice to say both are used for representing Unicode characters, and one is better in some situations than the other
- The editor allows you to directly input a char/Rune via a text box, or entering in the Unicode code point via a new CharInputDialog
- VersionEditor - for System.Version objects
- Finished primary work with BrushEditor
- Re-redesigned the UI, this is the final design now
- Added in the Linear Gradient Editor and Radial Gradient Editor dialogs
- Allows users to add/edit/remove stops, and also control the direction of the gradient, among other options
- Includes new controls specifically focused on gradient editing
- Added in the Image Brush Editor Dialog
- For editing controls with an ImageBrush specifically
- BrushEditor is now enabled by default
- There will be more work done in future versions, such as adding support for the Transform and RelativeTransform properties
- Added a multi-line editor for StringEditor
- You can now more easily add in strings with multiple lines via the new MultilineStringInputDialog
- Add support for nullable versions of various properties (i.e. int?, char?, Guid?, and more)
- ListEditorDialog now supports adding in new items to more lists
- If you have a list of integers, bytes, or more, ListEditorDialog can now add to that list
- Also, if the list's type has a string constructor, ListEditorDialog can use that too
- Also fixed some visual glitches and bugs with ListEditorDialog
- Fixed some visual bugs/typos with ListEditor and EnumerableEditor
- IntegerEditor now supports entering in hexadecimal values, by checking the "Display as Hex" option from the three-dots menu
- Note that the Property List control contains a lot of text in English. In the future, I'll probably introduce properties to allow changing/localizing a lot of the text, but for now, it's difficult to translate to another language without simply rewriting the entire control with new strings
- Added more editors for more property types
- Improvements to RelativePositionSelect control
- Added visual change when the control is disabled
- Fixed some visual issues with snap lines
- Changed SnapToSnapLines, SnapDistance, and KeyMoveStep properties to be dependency properties
- Also added TwoPositionsSelect control: similar to RelativePositionSelect, but allows selecting two positions in one area
- If controlling via the keyboard, use the Shift key to change which selector has focus
- Primarily used with LinearGradientEditorDialog, but might be of use to others too
- Additions to BrushFactory
- Added a "CreateCheckerboardBrush", to create a checkerboard pattern
- Such a pattern is often used in image editing programs and others that deal with colors, to represent transparency
- Added new methods to "CreateFromImage", to create tiling image brushes easily
- Added a "CreateCheckerboardBrush", to create a checkerboard pattern
- Other changes:
- Added a MultilineStringInputDialog
- Currently in the Utils namespace for now, but I'll probably move it in SSUI 2.0
- Similar to the existing StringInputDialog, but now, obviously, supports multiple lines
- Use Ctrl+Enter to accept the input and close the dialog (by default)
- Fixed a regression with the "AllowParentScrolling" property in SelectPanel
- Fixed a stack overflow error with the DoubleSpinner when MaxValue and Decimals are set to incongruent values
- Improved XML comments for Blend method in ColorsHelper
- Added a MultilineStringInputDialog
Version 1.9.2 - lists and sources!
Originally, I wasn't going to make a new release for a decent while for this library, but there were some changes that I wanted for myself that I decided to go ahead and implement. And while I'm at it, let's also throw in some other things!
One of the bigger changes is some architectural stuff to allow the SelectPanel to support ItemsSource, and more importantly, ListCollectionView, so that native WPF sorting and filtering functions can be used. To better interface with SelectPanel, I created the SelectableCollectionView which wraps around a ListCollectionView to provide the abilities of both a SelectableCollection and a ListCollectionView. Unfortunately, through implementing all of this, this did introduce a breaking change in SelectableCollection, as shown below. It should be a pretty easy fix though, if it even affects you at all.
Another notable change is some additional options and features for the PropertyList control, including a new and expansive editor and dialog for viewing and editing lists and IEnumerables. I still have a bit of a ways to go before I consider PropertyList fully-featured and no longer experimental, but this is a big step towards that.
Finally, I've also spent a lot of time adding more XML documentation to my code here. I'm surprised with how much was lacking before, and for that, I apologize. Now, you should have a more informed experience while using my library in Visual Studio, or viewing its documentation online here on GitHub.
Up next will be a 1.9.3 release in November (barring any other bug fixes I have to make), to add in .NET 7 support, more features for PropertyList, and maybe a few other things. The next big release, 2.0, will come out sometime in 2023!
Consume the library
🍔
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.7.1 and 4.8, .NET Core 3.1, .NET 5, and .NET 6!
- Build it yourself from code!
Breaking changes
(scroll down further for the full release notes)
- SelectableCollection's SelectionChanged event
SelectableCollection's SelectionChanged event now uses CollectionSelectionChangedEventArgs, rather than SelectionChangedEventArgs
Depending upon your code, you may not need to make any changes beyond simply rebuilding your code. For any impacted existing code, please follow the below example for a way to rectify this.
private void Collection_SelectionChanged(object sender, SelectionChangedEventArgs<T> e)
{
// your code
}
to
private void Collection_SelectionChanged(object sender, CollectionSelectionChangedEventArgs e)
{
var args = (SelectionChangedEventArgs<T>)e;
// your code
}
- FileSelect DispalyFilenamesProperty
The public field DispalyFilenamesProperty was renamed to DisplayFilenamesProperty.
- Removed ApplyColorScheme(hco) from TabDisplayItem
If, for some reason, you were using this, please instead transition to ApplyColorScheme(ColorScheme.GetHighContrastTheme(…))
instead
- Added ParentPropertyList property to IPropertyEditor
If you've created any of your own IPropertyEditor controls, you'll want to implement this property after the upgrade. Right now, if you don't do anything with knowing the parent PropertyList, you can just use an empty setter (see below example).
public ExperimentalPropertyList ParentPropertyList { set { } }
Release notes
- Added ItemsSource property to SelectPanel
- You can now either directly add and edit items with the SelectPanel via the Items property, or you can provide your own implementation via the ItemsSource property
- Note that the ItemsSource must be an IEnumerable of the SelectableUserControl type
- For best results, please use an ObservableCollection, SelectableCollection, or SelectableCollectionView as the source. With many other IEnumerable types, most features do not work
- I'll write some documentation at some later point to better re-explain this
- Also note that the MoveItemUp and MoveItemDown functions will not work if a custom ItemsSouce property is set
- (In comparison to native WPF controls, I realize this is a relatively limited scope for this property. For me, this was a tradeoff between predictable behavior (+ avoiding breaking changes) and adding more functionality to this control. I may revisit this in the future.)
- Added SelectableCollectionView
- This can be used as a source in the SelectPanel's ItemsSource property
- Wraps around the ListCollectionView class, so it can be used to provide sorting and filtering
- Also implements the features of the SelectableCollection
- Unfortunately, CollectionViewSource will not currently work with SelectPanel (thus, the SelectableCollectionView needs to be created in C# codebehind, rather than XAML)
- Improvements to Experimental property list
- Added ListEditor and EnumerableEditor
- To allow viewing and editing list properties, and viewing IEnumerable properties
- Includes a new ListEditorDialog, which will handle the actual viewing and editing
- Editing features only present if the property is an IList; otherwise only viewing
- I'll be doing more work with this in the future, but most everything is there
- Added "ShowReloadButton", "ShowFilterBox", and "ShowViewMenu" properties to control what's visible in the toolbar at the top
- Hiding all of these items will hide the toolbar entirely
- Added "ShowInheritedProperties" option, to allow hiding properties that were inherited from the object's base type
- Added "ObjectDisplayName" property, so a custom name can be displayed while an object is being viewed (by default, the PropertyList will attempt to set this property by using the object's Name property).
- Added method "CreateEditorForType" to expose PropertyList's property editor process for others to use
- Added method "Clear" to unload the currently observed object and clear the UI
- Added method "GetCurrentlyLoadedObject" to get the object currently being observed
- The PropertyList control is still considered experimental (thus, ExperimentalPropertyList), but this adds a number of features I wanted to implement. We're still a bit away from having this considered fully featured and complete though
- Added ListEditor and EnumerableEditor
- Added a lot of missing XML comments to various classes and controls
- Other items
- Fixed issues with various visual properties not working with CheckBox
- When binding to the Value of an IntegerSpinner or DoubleSpinner, by default the binding is now TwoWay (rather than OneWay)
- Added ColorSchemeChanged event to FlatWindow
- Added GiveFeedback and QueryContinueDrag events to TabItem
- (not currently used internally)
- Added error handling to DoubleStringConverter and FilePathToIconConverter
Version 1.9.1 - Bug fixes and PowerToys!
You know the old adage about removing code that seemed like it does nothing, but somehow everything breaks once it's removed? Yeah, that's what I've been dealing with. In my defense, Visual Studio told me the code wasn't being used! I just blindly followed along with it without actually double checking. So I guess it's still my fault.
Anyway, since I discovered this issue while developing a new feature, you also get this new feature early! Along with a couple other bug fixes and things I've put in.
Consume the library
🍔 🟦🟨
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.7.1 and 4.8, .NET Core 3.1, .NET 5, and .NET 6!
- Build it yourself from code!
Release notes
- Added support for color list files exported by Microsoft PowerToys's Color Picker tool
- Right now, only .txt files are supported, not .json files
- Only the color formats HEX, RGB, and HSV are supported; if you do not have one of these three formats in the exported file, then nothing will be loaded
- As PowerToys only added this feature not even a week ago, I'm wary that the file format/structure will change in coming versions. I'll provide future updates if there are changes
- Added WPF Commands to TabControl
- CloseCurrentTab: close the currently selected tab
- CloseSpecificTab: close a tab on this TabControl
- SwitchToTab: select and display a tab on this TabControl
- (note, with this the command TabListMenuItemClick was removed; change to use SwitchToTab instead)
- Added "CloseTab" function to TabControl
- Similar to the CloseSpecificTab command, provides a quick way to close a certain tab in the control
- Similar to other programmatic methods, this ignores the CanClose property on TabItems
- Bug fixes/tweaks
- Fixed crash/error when attempting to show a ColorPickerDialog
- Fixed visual glitches that may occur while mousing over the FileSelect control in certain situations
- Improved visuals of FileSelect control in certain color schemes, including high contrast themes
- Fix the Background property not doing anything in the CheckBox control
- Changed the layout of the "Styles/Decorations" section in FontSelectDialog (and improved the visuals in certain color schemes, including high contrast themes)
Version 1.9 - New year, new controls!
I was originally worried that this would be a relatively small release in comparison to 1.8, but comparing these release notes to the notes for the 1.8 release, I think I overcompensated in the other direction!
The headlining features/changes are the rewritten SelectPanel and FileSelect controls, and the introduction of the ExperimentalPropertyList control. I'll talk more about that new control in a moment. For the SelectPanel and FileSelect, the rewrite helps open up these controls and removes unconventional or unexpected behavior. The controls should look and act nearly identically, but now with some added improvements!
The ExperimentalPropertyList is the new control I'm building, alongside a whole new PropertyList namespace. This will be a very powerful control, which users can use to fully edit all kinds of objects. As you can guess by the title, the control is indeed still experimental. It's not particularly buggy, but it is missing a number of features before I could really consider it complete. Expect to see me add to it in upcoming 1.9.x releases, and it should hopefully graduate from being called "Experimental" with the upcoming 2.0 release.
So yeah, let's talk about what's next: version 2.0. Version 2.0 will have a few things I've talked a decent amount about in the past, such as a port of all controls to Avalonia UI and a rewritten ColorScheme class. I'm debating at what else I'll include with version 2.0, as I do want it to be a big release but I also don't want to bite off more than I can chew, you know? For now, version 2.0 will be expected to come sometime in 2023; the rest of this year will be focused on 1.9.x releases, including a 1.9.2 release expected in November when .NET 7 releases. As these future plans take a more solid shape, I'll discuss them more on my programming Twitter.
Finally, I've decided upon a path for creating online documentation for this library. Expect this wiki to be filled out in the coming weeks and months.
Consume the library
🍔 🟦🟨
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.7.1 and 4.8, .NET Core 3.1, .NET 5, and .NET 6!
- Build it yourself from code!
Breaking changes
(scroll down further for the full release notes)
- SelectPanel
- Removed function InitalizeComponent (no longer needed, just remove)
- Removed function ReapplyColorScheme (no longer needed, just remove)
- Removed function RemoveRange (not implemented in base classes, you'll need to build your own solution)
- Removed Children property (use Items property)
- Removed PanelBorderThickness property (use BorderThickness property)
- Removed SelectedItems property (use Items.SelectedItems property)
- Removed TabNavigation property (use KeyboardNavigation.TabNavigation property)
- Note that a number of methods have been marked as obsolete
- TabControl
- Tabs must now be defined in XAML directly underneath the TabControl element
- (i.e. do
<TabControl …> \<TabItem …> </TabControl>
) - Rather than the previous
<TabControl …> <TabControl.Items> <TabItem …> </TabControl.Items> </TabControl>
)
- (i.e. do
- Tabs must now be defined in XAML directly underneath the TabControl element
- FileSelect
- Default control height is now 30, rather than 28. You can manually set the height to 28 if needed
- Removed SelectedFile property (use SelectedFiles[0])
- Removed SelectedFileCount property (use SelectedFiles.Count)
- Removed AllowContextMenu property (to replace with your own menu, set the ContextMenu property; to remove the context menu, set the ContextMenu property to null)
- Removed PressOnClick property (not supported anymore, you'll need to build your own solution)
- Removed PerformClick method (not supported anymore)
- Removed Click, RightClick events (not supported anymore)
- ColorsHelper
- Changed the exact color values of a number of color resources; please refer to the old source code if you want the older values
- ColorScheme
- Removed PanelsUseAccent property (never used, no longer needed)
Known issue
- If configured in a few certain ways, there may be visual glitches in the background of the FileSelect control. This doesn't affect functionality
- ColorSelectDialog throws an error when you try to open it. Working on a fix
Release notes
- Completely rewrote SelectPanel
- SelectPanel now uses a ControlTemplate and styling, rather than being based off a UserControl like before
- This will allow you to be able to set a SelectPanel's contents at design time!
- You can write your own style for SelectPanel, if desired!
- Most functions and methods are still present and supported
- The RemoveRange function was not ported over, as ObservableCollection does not have this function
- TabNavigation was also not ported over, please use the standard WPF way to change this property
- (being
KeyboardNavigation.TabNavigation
in XAML orKeyboardNavigation.SetTabNavigation
in C#)
- (being
- The old SelectPanel discouraged use of the Children property. This new SelectPanel allows you to access the Items property without issue, as it's based upon the SelectableCollection
- Thus, the many helper methods present in SelectPanel aren't really needed anymore. I've marked them all as Obsolete,
- SelectPanel now uses a ControlTemplate and styling, rather than being based off a UserControl like before
- Completely rewrote FileSelect
- FileSelect also now uses a ControlTemplate and styling
- Primary reason is this will allow developers to develop their own custom styles for FileSelect, in case they want a different User experience
- FileSelect includes hard coded English text, but this can now be translatable by setting a style
- (in the future, I hope to be able to turn the remaining hardcoded text into properties that can be adjusted instead)
- Default appearance is now different:
- If multiple files are allowed, each file will be displayed in a scrollable list. (Users can also remove specific files by clicking the X button next to it)
- By setting
DisplayFilenames
to false, a more generic "x file(s) selected" message is displayed instead, similar to the previous experience
- The button can be docked to any side of the FileSelect control, by setting the
ButtonPlacement
property - Change the Browse button's text via the
BrowseButtonText
property, and change the "(no files selected)" message via theNoFilesSelectedMessage
property - FileSelect now uses a lot more commands, which can also be utilized in your programs to interact with FileSelect through XAML
BrowseForFile
: open an OpenFileDialog to select a fileOpenContainingFolders
: open the containing folders of each selected fileCopyFilenames
: copy the list of selected filesClearSelectedFiles
: clear the entire listRemoveSelectedFile
: if you pass the filename as a parameter, it will remove that specific selected file
- A number of other supporting classes were made during this transition as well:
LimitableStringCollection
allows FileSelect to reject files that do not match the given FileFilter, and also disallow multiple files if AllowMultipleFiles is false- This can also be used to set a limit of how many files can be selected, via setting the FileSelect.SelectedFiles.Capacity property
- This class can also be used in other situations where you want a fixed size observable collection of strings.
FilePathToIconConverter
can convert a file path to a 16x16 file icon in XAMLFilePathToNameConverter
can convert a full file path to just the file's name in XAMLImageTextListElement
is a basic control that can display text and an image without the advanced functions of the SelectableItem. It can also be used with SelectPanel (although you'll need to hook up the Remove button or hide it)
- The AllowContextMenu property was removed; to change the context menu, simply set the ContextMenu property to your preference (or hide it by setting the property to null)
- FileSelect also now uses a ControlTemplate and styling
- New control: ExperimentalPropertyList
- Similar to the PropertyList control in WinForms, and the WPF Properties pane in Visual Studio, this control can load in any object and allow you to view and edit its properties
- Includes a large number of editors out of the box to support various built-in types, and you can add custom editors too to support your own types
- Includes a filter text box at the top to filter properties (using their name and the name of their type)
- Use "@" to filter using only the property names
- I'll continue to refine and improve this control in future releases, as right now it's a little feature-light
- In the future (ideally either the 1.9.2 or 2.0.0 release), it'll be renamed to just PropertyList
- Improvements to TabControl and TabItem
- Added "TabBackground" property to TabItem to recolor the background of that specific tab (i.e. color-coded tabs or other scenarios). Also includes TabBackgroundChanged event
- Added "Padding" property to TabItem to change the padding (space) between the title/icon of the tab and the rest of the tab item. Also includes PaddingChanged event
- This does not affect the padding around the content of the tab. To add padding to the content, the content should be placed in a Grid and the Margin set on the Grid.
- Added "ExtraTabElement" property to TabItem, t...
Version 1.8.4 - I break things, I fix things
Hello! I was hard at work at the next major version of Solid Shine UI, version 1.9, when I encountered a bug by chance. With this bug, it seemed that when multiple TabControls were added to a program (not even in the same window), the most-recently-created TabControl ended up being the one where all the tabs from all TabControls were moved to, and then errors and exceptions popped up en masse once you tried to interact with any of the TabControls.
Obviously, this isn't ideal. After some digging, I came across an old MSDN article that covers this exact scenario and informs about what to do. … Wish this was something a bit more visible/discoverable, but whatever. I applied the fix, and now we're good. That is what prompted this rush patch release, version 1.8.4. … And then it turns out, by pure chance, version 1.8.3 likely didn't even have this bug to begin with! (It was probably introduced in commit 7509183, which I wrote after 1.8.3 released.)
So now, there's no reason for 1.8.4 to exist, I guess? The bug I was worried about, wasn't even in the earlier releases. … Well, maybe so! But I'd feel better knowing that I have it properly implemented and taken care of as soon as possible. And besides… there's other stuff to fix too!
Anyway, version 1.9 is well on its way. Expect a release of that sometime in March. When that releases, I'll discuss what will be happening next from there!
Consume the library
🍔 🟦🟨
One of three ways:
- Get the library from NuGet
- Download the binaries below!
- Versions for .NET Framework 4.7.1 and 4.8, .NET Core 3.1, .NET 5, and .NET 6!
- Build it yourself from code!
Release notes
- Broke and then fixed TabControl
- You should encounter no problems with having multiple TabControls in one program
- Note that dragging-and-dropping tabs from one TabControl to another is still not supported
- Improvements to ColorScheme
- Added a Light mode color scheme and Dark mode color scheme, creatable via the
CreateLightTheme()
andCreateDarkTheme()
methods - Provide an accent color with these methods to still add a bit of color for certain controls on mouse-over (some experimentation with picking an accent color may be needed to get the most desirable results)
- Added XML documentation to more properties in ColorScheme, to better describe what each color is used for
- Marked "PanelUseAccent" as obsolete, as it currently does nothing; this will be removed in SSUI 1.9
- "MenusUseAccent" also currently does nothing, but this will be addressed for SSUI 1.9
- Added a Light mode color scheme and Dark mode color scheme, creatable via the
- Layout changes in FontSelectDialog
- Now if certain parts of the dialog are hidden (i.e.
ShowWeights = false
), the other parts of the dialog will expand to remove any blank space - The end result isn't always the prettiest in my eyes, but it's better than just having wasted space
- Now if certain parts of the dialog are hidden (i.e.
- Improvements to FileSelect control
- Added BrowseText property to change the text on the "Browse…" button. Helpful for localization!
- Fixed null reference handling in the FileFilter property
- Improvements to SelectableCollection
- Added functions
IsSelected
,AddToOrReplaceSelection
andSelectAll
- Added more documentation to better describe various methods
- Fixed issues where the list of SelectedItems could contain unexpected items
- Added functions
- Other fixes and improvements
- Fixed unexpected appearance with ColorPickerDialog while using a high-contrast color scheme or other certain scenarios
- Fixed bug with CheckForegroundBrush with the CheckBox control