WPF Controls v2019.1 Build 682 Maintenance Release

by Avatar Bill Henning (Actipro)
Wednesday, August 21, 2019 at 6:45pm

A new v2019.1 WPF controls maintenance release is now ready for download.  This build makes numerous improvements and bug fixes across many products, with some more notable ones discussed below.

See the announcement post for the detailed list of improvements and updates.

Download Buy Now

Edit Box Decimal Place Rounding

All numeric edit boxes in Editors now allow you to specify the exact decimal place at which to round numeric values.

A DoubleEditBox that rounds to three digits

SyntaxEditor Touch Interaction

Touch-based input for operations such as scrolling, zooming, and selection have been greatly refined so that they are more natural.

IntelliPrompt Quick Info and Parameter Info

The previous build started supporting the use of syntax highlighting for foreground colors.  A problem was that it was using some app resources for background colors, meaning some scenarios could occur where the foreground text would blend with the background. 

The parameter info tip background now matches the view's background color

The fix for this problem made in this new build is to use the editor view's background color as the background of the quick info and parameter info tips.  That ensures the foreground colors always render in a readable way in regards to the background.

WPF Controls v2019.1 Build 681 Maintenance Release

by Avatar Bill Henning (Actipro)
Friday, June 7, 2019 at 6:09pm

A new v2019.1 WPF controls maintenance release is now ready for download.  This build improves the new search overlay pane, updates how IntelliPrompt quick info and parameter info tips are rendered, and fixes several bugs.

See the announcement post for the detailed list of improvements and updates.

Download Buy Now

Search Overlay Pane

The search overlay pane will now automatically move the selection to the next match as the find text is typed.

Typing in the search overlay pane

In this example, we see how altering the find text causes the selection to instantly move to the next match.

IntelliPrompt Quick Info and Parameter Info

This build updates all IntelliPrompt quick info and parameter info tips to use syntax highlighting for foreground colors and new application-based theme brush resources for the background/border of the info tips themselves.  Previously, info tips always rendered with a light background and generally used fixed colors for foregrounds.

An IntelliPrompt quick info tip rendered in Metro Dark theme using syntax-highlighted colors

This change was made to ensure that colors used in the info tips more closely resembles the actual syntax highlighting in SyntaxEditor.  It also allows info tips in Metro Dark theme to use a dark background.

WPF Controls 2019.1 Released

by Avatar Bill Henning (Actipro)
Wednesday, May 29, 2019 at 4:25pm

We are pleased to announce the release of the 2019.1 version of our WPF Controls.  This version includes the massive SyntaxEditor enhancements and updates we’ve been working on that have previously been described as “SyntaxEditor vNext” in the blog.

This announcement post contains the detailed list of updates.

Download Buy Now

Let’s dig in and see a handful of the larger SyntaxEditor updates.

Cross-Platform Design

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.  The 2019.1 UWP and WinForms versions of SyntaxEditor will follow later this year.

Carets and Selection

Multiple Selections

Editing with multiple carets

Multiple selections, each with their own caret, are now supported. 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.  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. 

Typing and copy/paste with multiple selections

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.

Touch Selection Grippers

Selection grippers displayed for touch-based selection

Selection grippers will show for the primary selection when touch input is used.

Caret Movement

Carets now support movement at both the start and end of word wrapped lines.

The caret in virtual space past the end of a line

Virtual space is now supported at the end of lines when a new option is enabled.  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.

Search Overlay Pane

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

Basic find and replace operations are available in the search overlay pane

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.

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.

If the SyntaxEditor.IsSearchResultHighlightingEnabled property is true, the search results can be highlighted while the search overlay pane is open. Closing the search overlay pane, clears the search result highlights.

IntelliPrompt

Vector Images

All Metro images are vector-based and show crisply in high DPI

The Metro Light and Metro Dark common image sets are now in vector form and render beautifully in high DPI.

Completion Filters

Completion filter buttons can narrow down the items in the list, such as all .NET types

Completion filters have been updated so when there are multiple active filters with the same ICompletionFilter.GroupName, any one of those filters can includes an item.  Toggle button completion filters were changed to appear unchecked when they aren't active, which is more natural.

Ctrl Key Opacity Changes

The logic for making IntelliPrompt popups and the new search overlay pane semi-transparent when the Ctrl key is held has been refactored and improved.  A brief delay was added before the opacity change occurs.

Splitting

The scrollbar splitter button now has a larger appearance.

Splitting a view, and the new option to drag to the bottom to keep the top view

The view splitter can be dragged to the bottom of the view to remove the split and keep the top view.

Scrolling and Zooming

Touch Scrolling

Smooth inertia-based touch scrolling has been added.

Auto ScrollBar Visibility

In Auto mode, the horizontal scrollbar is hidden since no horizontal scrolling is possible

The horizontal and vertical scrollbars now support an Auto visibility option that will only display then when necessary.

Horizontal Scrolling

Editor views can be scrolled horizontally with Shift+MouseWheel

Better logic was implemented for managing horizontal scroll maximums, especially when scrolling vertically.

Scroll API

New programmatic scroll methods were added that allow for aligning an anchor line to the top/center/bottom of a view with a specified pixel displacement, or scrolling by pixels.

Margins

Line Number Customization

The first view line renders with line number 121 due to a custom origin number set on the document

A new line number provider language service was added that allows for complete customization of how line numbers are rendered in the line number margin.  In addition, a property was added to the document that sets the line number for the first line in the document, defaulting to one.

Indicator Glyphs

The rendering of built-in indicator glyphs was improved.

Text Rendering

The text rendering of long lines was improved.

.NET Languages Add-on

IntelliPrompt completion list toggle button filters were added 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.

Roslyn Add-on

The optional Roslyn add-on was updated to use Roslyn v3.0.0.

Python Language Add-on

IntelliPrompt completion list toggle button filters were added 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.

ANTLR Add-on

The ANTLR add-on was updated to use ANTLR v3.5.1.

Irony Add-on

The Irony add-on was updated to use Irony v1.1.

WPF Controls v2018.1 Build 676 Maintenance Release

by Avatar Bill Henning (Actipro) - 1 comment
Friday, May 24, 2019 at 6:22pm

A new v2018.1 WPF controls maintenance release is now ready for download.  There were a large number of minor enhancements and bug fixes made across various products.

See the announcement post for the detailed list of improvements and updates.

Download Buy Now

v2019.1 Coming Soon

We wanted to get this v2018.1 maintenance release out in preparation for our upcoming v2019.1 release.  We are hoping to launch that new version very soon, which includes all of the "SyntaxEditor vNext" improvements described previously in the blog.

Stay tuned!

Moving WPF Controls to .NET Framework 4.6.1 and .NET Core 3.0

by Avatar Bill Henning (Actipro) - 10 comments
Monday, May 6, 2019 at 1:31pm

Our WPF SyntaxEditor vNext beta began a week ago and has been going well.  As we prepare for a 2019.1 version release, we are looking at making some other moves and wanted to get your feedback on them.  First, let’s dig into some low-level .NET details to set up the background.

About .NET Core 3.0

.NET Core 3.0 is a newer, cross-platform, open source variation containing much of what is in the .NET Framework.  It is still in preview with release date later this year, but is already much faster and more light-weight.  Microsoft has been ensuring that it is capable of supporting Windows desktop development platforms like WPF and WinForms, and they have been updating Visual Studio to support desktop app development based on .NET Core 3.0.  It also allows you to introduce newer Windows 10 APIs in desktop apps and host XAML islands (UWP controls).  Further, .NET Framework 4.8 is intended to be the final version of that framework, with .NET Core as the migration path moving forward.  More news in this area is sure to come in this week’s Build 2019 conference.

Moving to .NET Core 3.0

We’ve had numerous customers ask about moving our WPF Controls to .NET Core 3.0.  A near-term goal for us is to ship native .NET Core 3.0 variations of our WPF Control assemblies as option, while still shipping .NET Framework-based variations.

On a side note, the existing WPF Control assemblies can already be used within .NET Core 3.0 applications.  They are based on .NET Framework-only but are portable, and will work in .NET Core 3.0 applications.

What is .NET Standard?

This is where things get a bit more complex.  .NET Framework is the base set of .NET APIs we have been using ever since .NET began.  .NET Standard was more recently created as an API contract of sorts where a framework that implements a certain .NET Standard version guarantees that it supports a certain set of .NET APIs.   

Think of .NET Standard like a set of interfaces and .NET Framework like a set of classes that implement those interfaces.  Thus, more recent .NET Framework versions implement .NET Standard.

Microsoft's .NET Core diagram

.NET Core is simply another implementation of .NET Standard.  Since the API implementation surface area is now about the same between .NET Core and .NET Framework, it’s a good time to consider moving to .NET Core for future work. 

.NET Framework 4.6.1

The 4.6.1 version of the .NET Framework is now mature, as it was released at the end of 2015 and requires Visual Studio 2015 or later for development.  It supports .NET Standard 2.0.

Back on Framework Updates

Both .NET Core 3.0 and .NET Framework 4.6.1 implement .NET Standard 2.0, which is the minimum set of APIs a number of our WPF Controls and SyntaxEditor text/parsing assemblies require.

One option we’ve been considering is:

  • Moving some of our non-UI class libraries like the various SyntaxEditor text assemblies that have no WPF references to be .NET Standard 2.0 class libraries. This would enable them to work in .NET Framework, .NET Core, Mono, etc… basically any framework implementing .NET Standard 2.0.
  • Continuing to ship .NET Framework versions of the WPF Control assemblies, but making their minimum target .NET 4.6.1, compared to the current .NET 4.0 minimum target. The .NET 4.6.1 version is needed to support references to .NET Standard 2.0 assemblies mentioned in the previous bullet, and would require you to target .NET 4.6.1 or later in your .NET Framework-based applications.
  • Adding .NET Core 3.0 versions of the WPF Control assemblies, so there is zero .NET Framework dependency for customers who wish to go purely to .NET Core 3.0.

A Twitter Poll

Please answer our Twitter poll as to whether you would support the changes mentioned above or not.  If not, please indicate in the comments below or in the Twitter poll why.

Answer Our Twitter Poll

WPF SyntaxEditor vNext Beta

And as we close out this blog post, if any other WPF Controls customers would like to participate in the WPF SyntaxEditor vNext beta, please contact our support team.