Building a Better SyntaxEditor Text Rendering Engine

by Avatar Bill Henning (Actipro) - 1 comment
Monday, October 2, 2017 at 4:28pm


The past several weeks, we've been prototyping a new core text rendering engine for future use with SyntaxEditor (and possibly other products) that can be used across multiple platforms.  This text rendering API is the same across all supported platforms, which currently are WPF, UWP, and WinForms.  The implementation of that common API is platform-specific behind the scenes since each UI platform supports rendering text in very different ways.

SyntaxEditor would be a consumer of that text rendering API.  By using that text rendering API that is common across platforms, we could consolidate all the SyntaxEditor logic related to text formatting, rendering, and hit testing to be the same.

Platform Benefits

First the UWP version's text rendering implementation in this new engine is lightning fast, and would yield a massive rendering speed increase when merged into the UWP SyntaxEditor, compared to our current way of rendering text in the UWP SyntaxEditor.  It also would be more culture-sensitive with better logic on caret movement, right-to-left text, etc.

The WinForms version's implementation is also fast and compared to the current WinForms SyntaxEditor's way of rendering text, would gain culture sensitivity for caret movement, right-to-left text, etc.  Having a common text rendering API with other platforms would also be a big step in moving the WinForms SyntaxEditor down a path towards using the same general SyntaxEditor API as the other newer UI platforms use.  A future goal is to make this happen so that changes we make to features, add-ons, etc. can flow freely between all the SyntaxEditor platforms.

Finally the WPF version's text rendering is already very fast and culture-sensitive, but there are several logic enhancements we're making to improve speed when rendering long lines.

What's Next

We're still working on everything, but so far, tests in separate projects are very promising for the future of this text rendering API experiment.

Once things are finalized a bit more, we may plug it into one of the platforms like UWP to begin actual usage testing with SyntaxEditor.  This process will take some time since we will have to pull out all the plumbing for the current SyntaxEditor text rendering implementation, and adjust things to work with this new API.  We will give some updates once we make progress on that end.

WPF, UWP, and Silverlight Controls 2017.2 Released

by Avatar Bill Henning (Actipro)
Monday, August 28, 2017 at 5:22pm


We're happy to announce that the 2017.2 versions of our WPF, Universal Windows, and Silverlight controls have been released.  These versions include some new controls, new features, and a lot of minor updates and bug fixes.

See all the details on the 2017.2 releases in the various announcement posts:


Intra-Line Adornments

Full support for intra-line adornments is now included.  These allow whitespace to be reserved above and/or below view lines, and adornments rendered in that space.


A first new sample shows implementation of a Visual Studio-like Code Lens adornment with info display and hyperlink. 


A second sample shows a Visual Studio-like Peek Definition (embedded editor) display.  This is accomplished using a second SyntaxEditor within an adornment of the outer SyntaxEditor.

Vertical Scrolling

Vertical scrolling logic has been refactored to better handle view lines of various sizes.

Code Outlining

A couple new code outlining commands have been added: apply default outlining expansion and expand all outlining.

.NET Languages Add-on Roslyn Extensions

A new optional assembly is available that has Roslyn extensions for loading IBinaryAssembly instances that can be referenced by a project assembly, instead of using normal .NET reflection.

.NET Languages Add-on IntelliPrompt

IntelliPrompt completion is now available for object creation expression initializer member names.


Docking/MDI (WPF/UWP)

Floating Windows

A new property can be data-bound to your VM to float or restore a docking window.  The default location request event allows for specifying that a docking window should open in a floating dock host.  Docking windows that were closed while floating now support more precise restoration later.  Dragging standalone floating docking windows by their tabs now has a better experience.

Contextual Indicators

The read-only contextual indicator for documents now uses a separate display mechanism from the custom contextual indicators, allowing both to show at the same time.

Editors (WPF/UWP)


A new AutoCompleteBox control has been added that allows text entry and provides suggestions for auto-completion.


This kind of control is ideal for use in search query and quick launch kinds of scenarios.



Clicking a date on the popup calendar now closes the popup.

Grids (WPF/UWP)


The TreeListBox item adapter has been updated with a method that fires when hovering over an item during a drag, allowing you to determine whether it should be expanded.


New adapter methods have also been added that are called immediately before and after a drag, allowing for custom adornments to be displayed while dragging.

Shared Library (WPF/UWP)


A new AdvancedTextBlock control has been added that can show a tooltip when overflowed and can highlight spans of text based on captured text ranges (i.e. filter match results).

TaskDownload TaskBuyNow

Actipro Blog 2017 Q2 Posting Summary

by Avatar Bill Henning (Actipro)
Wednesday, July 12, 2017 at 8:01pm


What We Accomplished

In this quarter, we continued enhancing the 2017.1 versions of our WPF Controls, Universal Windows Controls, and Silverlight Controls.  Docking/MDI gained many minor feature improvements.  Editors added better support for custom formats in numeric edit boxes, default values, and had other tweaks. Grids improved tree filtering, empty content display, column header taps, focus tracking, and added/updated several samples.  SyntaxEditor's .NET Languages Add-on added C# 6 and VB 14 syntax support, improved resolver logic for partial classes and base types, and more.  Numerous other updates were made across these and other products.

What’s Coming Next

We currently are working on finishing up the feature set for the 2017.2 versions.  Docking/MDI has a lot of updates related to floating windows, Editors adds a new AutoCompleteBox control, SyntaxEditor adds intra-line adornments (like the VS editor's Code Lens or Peek Definition features) and scrolling logic is refined, and the .NET Languages Add-on is getting an option to use Roslyn to load reflection information for referenced assemblies.

Most information on these new controls and features will be published soon.

We hope to roll v2017.2 out in the next several weeks.

Blog Post List

Control Product Releases

WPF, UWP, and Silverlight v2017.1 Maintenance Releases

by Avatar Bill Henning (Actipro)
Wednesday, June 28, 2017 at 2:38pm

WPF Controls v2017.1 Maintenance Release

by Avatar Bill Henning (Actipro)
Wednesday, May 3, 2017 at 6:16pm


The WPF Controls 2017.1 build 651 maintenance release is now available.  This build has a large number of updates and new features for various WPF control products (Docking/MDI, Editors, Grids, Ribbon, SyntaxEditor, Shared Library), and includes bug fixes for all issues that have been found since the original 2017.1 release. 

In addition, the SyntaxEditor .NET Languages Add-on now supports C# 6 and VB 14 syntax, with full automated IntelliPrompt.  The screenshot below shows automated IntelliPrompt working properly with a null-conditional operator.


The rather large list of full update details are contained in this forum thread.

TaskDownload TaskBuyNow