A major new version of the Actipro WPF controls is now available. This version includes massive enhancements and updates to our SyntaxEditor product described as "SyntaxEditor vNext" in our blog. As part of those updates, SyntaxEditor's internals have been refactored to support a common API with the future 2019.1 versions of SyntaxEditor on the UWP and WinForms platforms.
Detailed Update List
- The internals of SyntaxEditor have been heavily refactored to support a cross-platform API across the WPF, UWP, and WinForms platforms. This allows SyntaxEditor features for the three platforms to be kept in sync moving forward.
Scrolling and Zooming
- Added smooth inertia-based touch scrolling.
- Added the SyntaxEditor.ZoomModesAllowed property, which uses a ZoomModes flags enum to select the input options (keyboard, mouse, touch) for zooming.
- The SyntaxEditor.HorizontalScrollBarVisibility and VerticalScrollBarVisibility properties now support an Auto mode that hides the related scrollbar when it isn't needed.
- Added support for Shift+MouseWheel to scroll editor views horizontally.
- Added the IEditorViewScroller.ScrollTo method that scrolls the view to a certain view line, which can easily be displayed to the top, center, or bottom of the view via options in the supplied TextViewScrollState struct.
- Added the IEditorViewScroller.ScrollByPixels and ScrollHorizontallyByPixels methods, allowing for diagonal and horizontal scrolling by pixels respectively.
- When resizing a view that is scrolled to the right, the horizontal scroll amount can adjust to ensure that there isn't too much empty space on the text area's right side.
- The view now remembers maximum line widths better, which prevents horizontal scrollbar maximum changing as much when scrolling vertically through lines that have very different widths.
- Updated the NavigableSymbolSelector control to scroll the target offset to the middle of the view if scrolling is required when a symbol is selected.
Carets and Selection
- Multiple selections, each with their own caret, are now supported as long as the new SyntaxEditor.AreMultipleSelectionRangesEnabled property is true. A new selection can be added by holding the Ctrl key when clicking in the text area or clicking on the selection or line number margins.
- Properties on the IEditorView.Selection object continue to operate on the primary selection range. A new Ranges property has been added to the IEditorView.Selection object that allows for enumeration of all selection ranges.
- Multiple selections can be set with the new IEditorView.Selection.SelectRanges method, or a new selection can be added with the AddRange method.
- Most edit actions have been refactored to fully support multiple selections. For instance, pressing Shift+Right Arrow will extend all of the selections by one character.
- Copying text from multiple selections unions the selected text, joining each range's text with a line terminator.
- Pasting multi-line text into a view with the same number of selections as text lines being pasted will replace each selection with a related line from the pasted text.
- The IEditorView.DeleteSelectedText and ReplaceSelectedText methods have been refactored to support applying to multiple selections when the EditorViewTextChangeOptions.CanApplyToMultipleSelections flag is set.
- Selection grippers will show for the primary selection when touch input is used.
- Carets now support movement at both the start and end of word wrapped lines.
- Virtual space is now supported at the end of lines when SyntaxEditor.IsVirtualSpaceAtLineEndEnabled is true.
- Block selections can be made in virtual space at the end of lines, even without line end virtual space being enabled. This prevents the caret from snapping to an offset when making a block selection, which can sometimes be problematic.
- Added the ITextChange.PostSelectionPositionRanges property that indicates the exact selection ranges for the source view after the text change is applied.
- Added the EditorViewSelectionEventArgs.PreviousSelectionRanges property that contains a snapshot of all selection ranges prior to the selection change.
- Added collapse selection left and collapse selection right edit actions.
- A new search overlay pane displays over the upper-right of the active editor view when Ctrl+F (find mode) or Ctrl+H (replace mode) are pressed in a multi-line editor. Related edit actions added.
- A toggle mode button on the search overlay pane switches between find and replace modes, and all common search options are supported via toggle buttons and other controls.
- The search overlay pane can be closed by clicking the X button or by pressing Esc.
- Ctrl+F3 will open the search overlay pane without focusing it, and will search forward for the currently-selected text. Ctrl+Shift+F3 will do the same but will search backwards. Related edit actions added.
- F3 will search for the next match of the previously-used search options. Shift+F3 will search for the previous match of the previously-used search options. Related edit actions added.
- If the SyntaxEditor.IsSearchResultHighlightingEnabled property is true, the search results will be highlighted while the search overlay pane is open. Closing the search overlay pane, clears the search result highlights.
- Holding the Ctrl key will make the search overlay pane semi-transparent so that you can see the text behind it.
- The new SyntaxEditor.OverlayPaneOpened and OverlayPaneClosed events fire when the search overlay pane is opened or closed.
- Updated the scrollbar splitter button with a larger appearance.
- Drag a view splitter to the bottom of the view to remove the split and keep the top view.
- Added the ITextViewLineNumberProvider language service with a DefaultTextViewLineNumberProvider implementation that allows for complete customization of how line numbers are rendered in the line number margin. Added the IEditorDocument.LineNumberOrigin property that sets the line number for the first line in the document, and defaults to one.
- Updated the IIndicatorTag interface to use the fast new rendering mechanism for drawing glyphs instead of making UI elements.
- Improved the rendering of built-in indicator glyphs.
Input and Editing
- Added the PerformTyping, PerformInsertTyping, and PerformOverwriteTyping methods to the IEditorViewTextChangeActions interface that simulate typing.
- Added the IEditorViewTextChangeActions.FormatDocument and FormatSelection methods, which call the related edit commands.
- Improved the open line above and open line below edit actions to use the current language's indent provider for caret positioning.
- Renamed the DuplicateLine edit action to Duplicate and improved it to only duplicate the selected text if there is a selection.
- IntelliPrompt UI reworked across all platforms.
- The Metro Light and Metro Dark common image sets are now in vector form and render beautifully in high DPI.
- Updated completion filters so when there are multiple active filters with the same ICompletionFilter.GroupName, any one of those filters can includes an item.
- Changed toggle button completion filters to appear unchecked when they aren't active, which is more natural.
- Refactored and centralized the logic for making IntelliPrompt popups and the new search overlay pane semi-transparent when the Ctrl key is held. Added a brief delay before the opacity change occurs.
- Improved the text rendering of long lines.
- The SyntaxEditor.IsDefaultContextMenuEnabled property determines if the default context menu is enabled. The default context menu is initialized and passed into the new SyntaxEditor.MenuRequested when a menu is requested for display. Handle the MenuRequested event to update the menu's items before it is opened.
- Added the SyntaxEditor.IsWordWrapEnabled property for easy binding in menu items.
- Added the SyntaxEditor.TextAreaFontSize property that can adjust the text area's font size without affecting overlay panes or IntelliPrompt.
- Language and view services are now tracked and retrieved in a new, more efficient mechanism.
- Added the ParseErrorTagger.MaximumParseErrorCount property that indicates the maximum number of parse errors to tag in a document. An enormous number of parse errors can slow down editing performance, so this property defaults to 5,000.
- Moved TextStylePreview and NavigableSymbolSelector controls up to primary SyntaxEditor namespace.
- Added the TextStylePreview.Text property to allow changing of displayed text.
- Refactored UI automation peers and moved the ITextProvider implementation from the SyntaxEditor peer to the IEditorView peer.
.NET Languages Add-on
- Added IntelliPrompt completion list toggle button filters for the various kinds of items displayed in the list.
- The IntelliPrompt completion filter UI (toggle buttons and tabs) only shows based on the available items in the unfiltered list. For instance, if there are no types in the list, no 'Types' toggle button filter is visible.
- Updated the optional Roslyn add-on to use Roslyn v3.0.0.
Python Language Add-on
- Added IntelliPrompt completion list toggle button filters for the various kinds of items displayed in the list.
- The IntelliPrompt completion filter UI (toggle buttons and tabs) only shows based on the available items in the unfiltered list. For instance, if there are no classes in the list, no 'Classes' toggle button filter is visible.
- Updated the ANTLR add-on to use ANTLR v3.5.1.
- The ANTLR integration sample project is no longer installed by default. Use an installer option to install it.
- Updated the Irony add-on to use Irony v1.1.
- The Irony integration sample projects are no longer installed by default. Use an installer option to install them.
Oslo Dataflow Add-on
- Removed the Oslo Dataflow Add-on since support for that technology by Microsoft was ended many years ago.
- Some breaking changes were made to accommodate the new SyntaxEditor cross-platform API, and for improved API clarity. See the 'Converting to 2019.1' documentation topic for information on any breaking changes.
- Switched all product source projects to use the new SDK style of .csproj files.
Hotfix Update 2019-05-30
- Resolved a bug introduced in the previous 2018.1 build where the Ribbon Home tab wasn't selected when first loaded.
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.
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.
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.
[Modified 18 days ago]
Actipro Software Support