WPF Controls v22.1 Released

Announcements Forum

Posted 2 years ago by Actipro Software Support - Cleveland, OH, USA

A major new version of the Actipro WPF controls is now available.

Detailed Update List


  • Added new AggregationKind.SignedMaximum and AggregationKind.SignedMinimum which compare against absolute values while retaining the sign of the original value; e.g., -5 is greater than 4.
  • Refactored internal data processing logic to support more data types and throw InvalidOperationException for unsupported types.
  • Fixed an issue with AggregationKind.Average where the first value in the set being aggregated might not be properly applied to the final average.
  • Fixed an issue with AggregationKind.Average where DateTime value types might be converted to Int64 value types.
  • Fixed an issue with XYDataPointCollectionView throwing DivideByZeroException when initialized with zero for optimal aggregation count.


  • Improved the various predefined columns that integrate Editors controls into DataGrid to pass updated column property values onto the generated Editors controls.


  • Improved how focus is applied to TreeListBox controls when a docking window is activated.


  • Added a PartEditBoxCommitTriggers.LostFocus option so that commit on focus loss is now optional, which is a breaking change since it previously always occurred. The Default and All options have been updated to include LostFocus so they operate like before. If you use any other custom options, you must also now include the LostFocus option to retain the same behavior as before.
  • Renamed the PartEditBoxCommitTriggers.None option to Manual. The previous None option implicitly committed on focus loss. Use the new LostFocus option instead of None to retain the same behavior as before.
  • Updated the numeric edit boxes to support input of Full-width and Arabic-Indic digits.


  • Renamed 'ToggleSwitch' as 'FlipSwitch' to avoid ambiguity with new 'ToggleSwitch' control. See the 'Converting to v21.2' documentation topic for information on breaking changes.


  • Added the TreeListBox.FilterApplied event that is raised after the current filtering state has been applied to all of the control's items, generally occurring when DataFilter is changed, or filtering is enabled or disabled.
  • Added a TreeListBoxItemAdapter.GetAbsolutePath method that can be implemented to improve performance in large trees when searching for a tree node.
  • Improved TreeListBox item focus tracking in response to selection changes.
  • Improved TreeListBox when filtering with DataFilterResult.IncludedWithDescendants to only ensure items included by the filter are made visible via expansion, instead of all descendants.
  • Improved PropertyGrid to support watching collection properties that use EnableCollectionSynchronization.
  • Fixed a bug where the TreeListBox.InvalidateChildren method didn't properly reinitialize the node's children in a certain scenario.
  • Fixed a bug where the PropertyGrid.ChildPropertyRemoved event wasn't being raised appropriately.


  • Added new MicroAggregationKind.SignedMaximum and MicroAggregationKind.SignedMinimum which compare against absolute values while retaining the sign of the original value; e.g., -5 is greater than 4.
  • Refactored internal data processing logic to support more data types and throw InvalidOperationException for unsupported types.
  • Fixed an issue with MicroAggregationKind.Average where the first value in the set being aggregated might not be properly applied to the final average.
  • Fixed an issue with MicroAggregationKind.Average where DateTime value types might be converted to Int64 value types.
  • Fixed an issue with MicroXYDataPointCollectionView throwing DivideByZeroException when initialized with zero for optimal aggregation count.


  • Added the ZoomContentControl.ZoomLevelChanged event.
  • Updated Breadcrumb to stop reopening drop-down menus on button mouse over when a menu is closed via the Esc key.


  • Added the Ribbon.IsToggleMinimizationButtonVisible property to determine if the toggle minimizable button is visible when the Ribbon is minimizable.
  • Improved built-in context menu display logic.
  • Fixed an issue where the title bar quick access toolbar wouldn't show key tips for its children.


  • Fixed a bug where ShellTreeListBox's handling of an external selection change could lead to excessive processing in a certain scenario.


  • Added a Drag and Drop QuickStart to demonstrate multiple interaction models and features.
  • Added support to customize drag/drop text when dragging within the same editor.
  • Added an Editor Views - Synchronization QuickStart to demonstrate synchronizing the scroller, splitter, and zoom level of one editor instance with another.
  • Added new non-generic interfaces ITaggerBase (implemented by ITagger<T>) and ITagAggregatorBase (implemented by ITagAggregator<T>) for a type-safe way of working with these types when the type of ITag is not relevant.
  • Added ITaggerBase.NotifyTagAggregatorAttached and ITaggerBase.NotifyTagAggregatorDetached which are called when an instance of TagAggregatorBase<T> attaches to or detaches from a tagger.
  • Added CanKeepCaretVisible property to ScrollDownAction and ScrollUpAction to control if the caret should optionally be moved to remain visible after scrolling. Corresponding overloads added to IEditorScrollViewer.ScrollDown and ScrollUp methods.
  • Added various IQuickInfoSession.Placement* properties that return values if the placement-oriented Open method was used to open the session. Updated the IntelliPrompt Quick Info QuickStart to demonstrate repositioning the QuickInfoSession.PlacementRectangle property for these kinds of sessions as the view is scrolled.
  • Improved the vertical scrollbar behavior when dealing with collapsed regions.
  • Improved the positioning logic for IntelliPrompt popups, especially on tablet PCs with right-handedness set.
  • Improved the logic for the EditorSnapshotChangedEventArgs.TypedText property to remove whitespace that might have been added to pad a typed character for proper virtual space positioning.
  • Updated the Language Designer app to support creation of AST node interfaces.
  • Updated drag-and-drop behavior to support customization through DragEventArgs.Effects.
  • Updated drag-and-drop to scroll horizontally when the drop caret is near the edges of the control.
  • Updated drag-and-drop to remove possible unnecessary scrolling following a drop.
  • Updated feedback when dragging to only show the 'Copy' or 'Move' indicator over valid drop locations.
  • Updated Single-Line Mode QuickStart to include a formula example with alternate style for nested parenthesis.
  • Updated IDataStore.GetText method to support String data format if UnicodeText and Text are undefined.
  • Updated IDataStore.SetText method to replace Html and Rtf data formats with new text.
  • Updated TagAggregatorBase<T> so it no longer calls Dispose when detaching from taggers which implement IDisposable. Taggers can use the new ITaggerBase.NotifyTagAggregatorDetached method to determine the most appropriate time to dispose of the tagger.
  • Updated SyntaxEditor.IsDocumentReadOnly to a read-write property and the corresponding dependency property SyntaxEditor.IsDocumentReadOnlyProperty now supports two-way bindings.
  • Updated the SyntaxEditor.SuspendCaretBlinking and ResumeCaretBlinking methods to support caret display when focus is not in the editor.
  • Updated the IntelliPrompt repositioning logic to better handle when a session is closed due to being scrolled out of view.
  • Updated the MoveSelectedLinesDownAction logic to prevent unexpected results when at the document end.
  • Updated outlining logic to ensure that a collapsed outlining node expands if its end is removed and it becomes an open node.
  • Fixed an issue where automatic vertical scrolling caused by dragging near the edge of a view might reset the selected text.
  • Fixed an issue that prevented dropping text around block selections.
  • Fixed an issue that caused the caret to stop rendering properly after dragging and dropping text outside of the editor.
  • Fixed a bug where setting HighlightingStyle.BorderColor to null in styles with a border could trigger an exception when rendering.
  • Fixed a bug where a code snippet with an $end$ defined immediately after a field may not position the caret properly when Enter was pressed after editing the field.
  • Fixed a bug where exported RTF and HTML didn't account for a customized plain text foreground.
  • Fixed a bug where calling IEditorView.InsertSurroundingText from witin a SyntaxEditor.DocumentTextChanged event handler could result in an incorrect final selection.
  • Fixed a bug where typing in a block selection after a collapsed outlining node could lead to an incorrect selection range.
  • Fixed a bug where a collapsed region without a related intra-text spacer at document end could throw an exception.
  • Fixed a bug where the selection wasn't always correct after an indent for a block selection that included virtual space.
  • Fixed a bug where a block selection that begins with no characters selected in the first line wouldn't copy the text properly.
  • Fixed a bug where pressing Enter with a block selection at the document end could incorrectly delete characters.
  • Fixed a bug where deleting a collapsed outlining node that had its quick info open could throw an exception.
.NET Languages Add-on
  • Added a Go To Definition QuickStart to demonstrate using an IResolver to navigate to the source of a reference.
  • Updated the C# parser grammar to support C# 8.0 syntax.
  • Updated the C# outliner to create outlining nodes for code-level constructs such as block statements. This feature can be disabled by setting the CSharpOutliner.CanOutlineCodeLevelConstructs property to false.
  • Updated the SourceFileLocation property to be populated on all ITypeMemberDefinition objects from source, and added it to IParameterDefinition and IVariableDefinition objects loaded from source. This allows for Go To Definition functionality to be implemented for all kinds of resolved objects.
  • Updated the DocumentationProvider.ToString method to return the raw XML documentation comment text.
  • Updated CSharpContextFactory and VBContextFactory to better handle target expression resolution when positioned immediately after a significant token.
  • Fixed a bug where IntelliPrompt completion displayed incorrect results in VB array initializers.
Web Languages Add-on
  • Updated the JavaScript parser grammar to support ECMAScript 2021 (12th Edition) syntax.
  • Updated JsonSyntaxLanguage with a new constructor overload for whether the lexer supports JavaScript style comments, as in Microsoft's JSONC variant.
  • Updated the XML context factory to return an AST node for the target element, if the AST is in sync with the tokens that generated the target element.
Python Language Add-on
  • Updated the parser grammar to support Python v3.9.5 syntax.
  • Updated the resolver to support namespace packages.
  • Removed support for Python v2.x syntax, which is well past end of life.
  • Fixed an issue where an aliased dotted import name might not resolve correctly.


  • Added WindowChrome support for the snap layout menu when hovering over the maximize button on Windows 11 systems.
  • Added the WindowChrome.CornerKind property that allows system-rendered window corners, borders, and drop shadows on Windows 11. Rounded borders will now be active by default on Windows 11 systems.
  • Added the ThemeManager.IsThemeSupported method that returns whether a theme name is for a predefined theme or a registered custom theme.
  • Added an overload for ImageProvider.GetImageSource that takes a string-based key to internally resolve the associated ImageSource.
  • Added SharedImageSourceKeys class to define the built-in keys supported by ImageProvider.GetImageSource including four icons consistent with system icons for error, information, question, and warning.
  • Updated the ThemeManager.CurrentTheme property setter to throw an exception if you set a theme name that is not for a predefined theme or a registered custom theme.
  • Updated various TextBox templates to ensure Padding is applied to hint text.
  • Updated WindowChrome overlays to support being made visible prior to the Window.Loaded event being raised.
  • Fixed a bug where opening a Window that uses WindowChrome in a separate thread prior to ThemeManager initializing could cause an exception.


  • Fixed a bug in the .NET Framework version of the Wizard designer where the first page wasn't initially visible.


  • Added the ToggleSwitch control, which is often seen as a replacement for a traditional CheckBox in modern user interfaces.
  • Added the User Prompt controls that can be used to create fully themed MessageBox-style prompts.
  • Added the BorderChildClipConverter, which can be used to ensure that a Border.Child element is properly clipped according to the Border.CornerRadius.
  • Added AnimatedExpanderDecorator.IsAnimationEnabled property for individual animation control that is automatically disabled when not supported by the current environment.
  • Improved how DelegateCommand's ICommand interface implementation handles a null command parameter argument when the generic type argument is non-nullable.
  • Improved the UIColor.Grayscale method logic.
  • Updated AnimatedExpanderDecorator to not measure/arrange its child element when the owner Expander is collapsed.
  • Updated PopupButton to focus the first enabled menu item in its PopupMenu if the menu was opened via the keyboard.
  • Updated PopupButton to focus the button when Esc is pressed to close its PopupMenu.
  • Updated PopupButton to not show its ToolTip if the popup is open.
  • Updated PopupButton's Esc and Alt+Up key handling to only occur if its popup is currently open.
  • Updated PopupButton's popup to close when StaysOpen is false and the end user Alt+Tabs to another window, or focus moves outside of the control.
  • Fixed a bug where the PopupButton.LogicalChildren property didn't return a proper IEnumerator.
  • Fixed a bug where clicks from non-left mouse buttons on a PopupButton's popup indicator area would open the popup.
  • Fixed a bug where DataFilterGroup didn't always handle IncludedWithDescendants results properly.
  • Fixed a bug with AnimatedExpander not expanding properly when clicked while the app doesn't have focus and IsAutoExpandOnFocusEnabled is true.


  • Validated .NET 6 compatibility.
  • Added .NET 5 variations of the product assemblies to the NuGet feeds.

About WPF Controls

WPF Studio / WPF Essentials Licensing

You can purchase our WPF controls individually if you wish however you have the option to purchase all of them in the WPF Studio bundle. Purchasing the bundle saves over 60% over purchasing all the WPF controls individually.

The WPF Essential bundle saves over 45% over purchasing its bundled controls separately.

That's some incredible savings!

WPF Studio Benefits

All WPF control licenses automatically include a free subscription for a year of free upgrades to any new versions that are released. At the end of the year, you may renew your license for another year to keep the free upgrade benefits active.

In addition, if you own a WPF Studio license, you are automatically eligible to receive free licenses for any new WPF control products added to WPF Studio that come out within your year period. This benefit does not apply to WPF Essentials customers.

Evaluation Download

You can download an evaluation of all our WPF controls from this page:


Upgrade to WPF Studio

Contact our sales team for information on discounted pricing for upgrading from one of our older WPF control product licenses to a license for WPF Studio, WPF Essentials, or a new version of a WPF control product.

Free Upgrades

If you own an older WPF Studio version or one of its products and would like to upgrade to this latest version, please click the request a free upgrade link on your organization account page's 'Purchases and Licenses' tab. The link will appear there if your upgrade eligibility is active.

Actipro Software Support