About Us

Actipro Software
is a leading provider of .NET user interface controls for the WPF, UWP, Silverlight, and WinForms frameworks,
and is most well-known for their SyntaxEditor syntax-highlighting code editor control.

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

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

Introducing Shell Controls (WPF only)

The 2018.1 version of the WPF Controls introduces a beta of a new Shell controls product that we've been developing the past several months.

Actipro Shell controls allow for easy folder and file browsing. While the product comes packed with a pre-built implementation for the Windows shell that mimics Windows Explorer, the controls are fully customizable, allowing you to filter or change the folders/files presented. Or build your own shell service to support other files systems, such the remote side for a FTP client.

The ShellTreeListBox control presents a shell folder hierarchy in a tree structure. It is often paired with a ShellListView control, which shows the contents of a selected folder using column-based property display. Both controls support customizable tool tips, context menus, multiple image sizes that account for high-DPI scenarios, and in-line renaming.

All of the UI found in the Shell controls is native WPF, even the context menus. Unlike competitive products with interop-based user interfaces, the Actipro Shell controls don't have any airspace or focus issues, and every bit of UI can be fully-themed or even customized with XAML data templates.

Although these controls are still in beta, they should be stable for usage in production. If you would like to submit suggestions for improvement, please post them in our Shell discussion forum or join our Slack workspace. We've done a lot of planning with beta testers in the Slack #uicontrols channel.

Let's take a quick look at some of the more notable features that were added.

Charts

Bar Customization

The series style selector's method for picking each bar's style in a bar chart has been updated to be passed bar index and count, allowing for individual bars to be customized.

Docking/MDI

UIA Updates for Better Coded UI Test Support

The docking window container UIA hierarchy has been updated to better support Coded UI Test. These changes should now allow Coded UI Tests for controls in docking windows to record and play back successfully.

Keeping Auto-Hide Popups Open For Dialogs

There is now a property that can be set temporarily to prevent an auto-hide popup from closing when WPF keyboard focus is lost from it, which can happen if a dialog window is opened from a button on the docking window. In this scenario in the past, the button could be clicked and the auto-hide popup might slide back. The new option allows the popup to remain open when the dialog is open.

Improved Dragging Over Nested Linked Dock Sites

Updated docking window logic now shows dock guides by default for linked dock sites at the same nesting level, when there are multiple dock sites nested. If there are multiple linked dock sites covering the same drag location, the Shift key can be held to switch dock guides to an alternate dock site.

Editors

MaskedTextBox Input Improvements

Logic has been updated to block some input that would trigger a shorter match.

NaN and Infinity Support Added to Multiple Edit Boxes

The CornerRadiusEditBox, PointEditBox, RectEditBox, SizeEditBox, ThicknessEditBox, and VectorEditBox controls now all have properties that can be set to allow NaN and infinity component values.

Gauge

Improved Digital Gauge Segment Rendering

The distance between digital gauge segments for the 7-segment (normal) and 14-segment (normal) character sets has been reduced, making the digital gauges easier to read at certain sizes, and more like most real readouts.

SyntaxEditor

Free Sample C#/VB Syntax Language Updates

The free language definition files now support C# 6 and VB 14 enhancements.

XML Start Tag Self-Closing

The XML auto-completion logic in the Web Languages Add-on will self-close start tags if a '/' is typed.

Summary

There were also a large number of smaller improvements made throughout the products. See the announcement posts for the detailed list of enhancements and updates:

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms. This effort is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

As we continue development of SyntaxEditor vNext, we are getting into porting in the caret/selection feature area. We've seen a couple newer editors support the concept of multiple carets/selections and would like to get some feedback on if this is a desired feature by our customers. This is different than the rectangular box selection feature we currently already support.

Rectangular Box Selection

Rectangular box selection is already supported in SyntaxEditor and looks like this:

When this selection is active, you can type and it will enter text at the same column on each line. You can also copy box-selected text and when it's pasted, it will retain the box layout. This is a very handy and powerful feature.

Multiple Carets/Selections

Now what happens if you want to make multiple updates but not necessarily in the same column. Let's take a look at a scenario:

In the screenshot above, the caret is next to a Write method call. Let's say we want to update all the Write method calls to be WriteLine instead. We could change it once and copy/paste it to the other locations. But if we had multiple caret support, you could throw a caret at the end of each of the four Write method calls (in various columns) and simply type Line to update all of them.

One implementation of this I saw used Alt+Click to add carets. I don't personally like this because Alt is used as a system menu accelerator and causes issues like underlines to appear in menus if you Alt+Click.

Another implementation of this used Ctrl+Click to add carets. That seems better since it won't run into the system menu accelerator issue. The downside is that Ctrl+Click is currently used in SyntaxEditor (and Visual Studio's code editor) to do quick word selection. Thus we'd need to rework some of our existing keyboard shortcuts to accommodate new features.

Both these implementations also use Ctrl+U as a way to undo the last selection change, whereas SyntaxEditor and VS currently tie that keyboard shortcut to making selected text lowercase.

Summary

Let's hear from you… is the multiple caret/selection feature something you'd like to see? How would you prefer to see the keyboard shortcuts adjusted to accommodate new features?

The Microsoft .NET Framework January 2018 Security and Quality Rollup that was released on January 9, 2018 contains a big mistake that causes any calls to Fonts.SystemFontFamilies to immediately throw an exception.

This affects some of our UI control products, many other third party apps, and possibly your own code as well since that API is a commonly-used .NET property.

The problem doesn't seem to occur on Windows 10, but does occur on Windows 7 systems that have installed the rollup.

Symptoms

The exception message that appears is something like:

No FontFamily element found in FontFamilyCollection that matches current OS or greater: Windows7SP1

With stack trace:

at System.Windows.Media.Fonts.get_SystemFontFamilies()

Workaround

The only workaround at the moment until it is fixed by Microsoft appears to be to uninstall the KB4055532 rollup on Windows 7 machines.

We expect this to be resolved by Microsoft quickly since posts about it are popping up all over the Internet:

Our v2017.2 WPF, Universal Windows, and Silverlight controls have all been updated with new maintenance releases that are now ready for download. It is highly recommended that you get these new builds since many products received numerous minor enhancements and bug fixes.

Let's take a quick look at some of the more notable features that were added.

Charts

Display Optimizations

The line charts have had optimizations in them to try and align to pixel values to reduce anti-aliasing. While this generally improved readability, when rendering a curve like a sine wave, this can result in some jaggedness of the curve. We added an option that allows these display optimizations to be turned off for those scenarios.

Docking/MDI

Dock Host Changed Event

A new event is raised whenever a docking window's dock host changes, allowing for knowing when a docking window transitions to a floating state and back.

Dragging Enhancements

The dragging experience for a single tab has been improved. When dragging a docking window over a nested linked dock site, the Shift key can be used to target the outer dock host.

Interop Improvements

Numerous improvements were made to how InteropFocusTracking handles mouse clicks and focus tracking for interop controls in docking windows.

Dock Guides

Dock guides (when in non-hosted node) can now render outside of the bounds of the target dock host when necessary. This scenario can occur if the containers in the dock host are small.

Editors

MaskedTextBox Data Binding

A new MatchedText property has been added to MaskedTextBox to allow data binding without any prompt text.

Pointer Double-Clicks

Double-clicking an edit box part now selects the entire part's text.

Color Picker Alpha Component

The ColorPicker's alpha component has been changed to be percentage-based, which is more in line with most applications.

Grids

Key Handling

The ability to customize how Enter keys are handled for various property editor types has been added.

SyntaxEditor

Read-Only Regions

Read-only regions have been enhanced with properties that determine if editing is allowed on their first and/or last edges.

Code Outlining

The code outlining logic has been Improved to better handle mismatched outlining nodes.

JSON Parser

The JSON parser in the Web Languages Add-on has been enhanced with better error handling.

Theme Browser

We've updated the Theme Browser utility in the Sample Browser with a new textbox that allows filtering of resources.

Summary

There were also a large number of smaller improvements made throughout the products. See the announcement posts for the detailed list of enhancements and updates:

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms. This effort is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

In the previous SyntaxEditor vNext post, we showed some massive improvements in SyntaxEditor touch interaction, including inertia-based touch scrolling and pinch-to-zoom features. In today's post, we'll examine a new feature area that allows you to customize the line numbers displayed in each view's line number margin.

Default Behavior

By default, a view's line number margin displays the line number (document line index plus one) for each view line. If a view line is a wrapped line, nothing appears for that view line in the margin.

In vNext, several new features are being added to support customization of the line number display.

Document Fragment Scenario

One scenario where line number customization is appropriate is when you have an enormous file and only want SyntaxEditor to show a fragment of it, such as several thousand lines. In this scenario, you might make a document with lines 10,000-20,000 in it. The first line in SyntaxEditor is really line 10,000 in the file, but it normally shows as line #1 in the line number margin. This can be confusing to the end user.

A new property on the document class allows you to change the line number origin, which defaults to 1. For the scenario described above, you'd set it to 10,000 instead. All line numbers after that origin number will continue to be relative to it.

Advanced Scenarios

What about cases where a language might have specific line numbers or labels that should show for certain view lines? This is possible too via a new language service that allows for completely customizing the text to display for each view line in the line number margin.

In the screenshot above, we've set the line number margin to show the zero-based offset of each line. For a couple lines, we've also indicated labels for the namespace and class lines.

Summary

The new custom line numbering features are very easy to use for changing default line number margin content.

We'd like to announce that the Windows 10 rewrite of Code Writer, our free text and code editor app for the Windows platform, is now available on the Windows Store for all Windows 10 users running Fall Creators Update or later.

Code Writer makes a perfect replacement for Notepad and other quick edit apps.

Reimagined Windows 10 Design

For the 3.0 version, we rebuilt the entire user interface of the app from scratch for Windows 10. While our older v2.6 UI was great as a full screen Windows 8 app, v3.0 was made with windowed usage in mind, and delivers a much more modern interface that is a pleasure to work in. It also makes heavy use of advanced UI features like acrylic and animations.

The new design still maintains a color bond with file types (as above where the C# file shows green in the status bar).

The list of currently-open documents is displayed in the Explorer side bar. New documents can quickly be created there, and other existing documents can be opened.

Another new concept in v3.0 is a command palette. This popup allows you to quickly type a portion of a command you're looking for, and the list narrows as you type. Press Enter to execute the selected command.

The app is minimalist in nature, and while it does feature a side bar, the side bar can be collapsed by pressing the unpin button. This affords a distraction-free environment while you edit text/code.

Summary

If you have the Windows 10 Fall Creators Update or later, download Code Writer for free from the Windows Store today to check out v3.0 and all it has to offer. The new redesign has been a labor of love that has been in development for many months. We're very pleased to get it out into your hands as a showcase of what you can do with Actipro's Universal Windows Controls. Enjoy!

If you are a Universal Windows app developer, you can download a free evaluation of our Universal Windows Controls to use in your own apps. Code Writer makes use of our SyntaxEditor, Docking/MDI, PropertyGrid, and Editors controls. SyntaxEditor is of particular interest because it lets you add advanced code and text editing to your own apps.

As mentioned in a previous post, we have been working on refactoring the core internal implementation of our SyntaxEditor code editor control on the WPF, UWP, and WinForms platforms. This effort is being made to bring all three platforms onto the same codebase for easier updating moving forward, and to enhance features wherever possible.

In the previous post, we discussed how a new text rendering engine was being built that improved rendering speed, and how numerous scrolling improvements have been made. In today's post, we'll take a look at how some new touch-input features are being added to vNext that take advantage of the rendering engine and scrolling enhancements.

Touch Interaction

In the current version, the UWP SyntaxEditor is the only one that supports touch-based scrolling, and its implementation scrolls in a line-based fashion, making the scroll experience choppy.

In vNext, we wanted to improve this. As seen in the animation below, we've added touch scrolling support to the WPF, UWP, and WinForms SyntaxEditors, and the scrolling is pixel-smooth. The scrolling even uses inertia, allowing for flick scrolling!

The WPF and UWP platforms support touch zooming as well, which can also be seen in the animation above. Simply take two fingers and pinch to zoom. It all uses smooth animated transitions too.

Summary

Adding improved touch input support is something we've wanted to do for a long time. We're very pleased with how these features have turned out so far.

We've spent the past three months mostly working on redesigning some of the core implementation of our SyntaxEditor control and wanted to give an update today on where things stand. From this point forward, we'll call this development effort "SyntaxEditor vNext".

Unified Text Rendering Engine

The first phase of this was described in our previous Building a Better SyntaxEditor Text Rendering Engine post. What we've done is come up with a common API that can be used for text rendering and is the same across WPF, UWP, and WinForms. It allows consumers of this text rendering API (namely SyntaxEditor) to have a single way to perform all its core text formatting/rendering, etc.

This is important because when we have a common API wrapper for performing those difficult and very platform-specific tasks, we are able to consolidate all the code that calls into that API to be more or less platform agnostic. And that means the WinForms SyntaxEditor will see some huge benefits. More on that below.

Universal Windows

The new UWP text rendering engine implementation is much, much faster than the current way we render text in the UWP SyntaxEditor. In fact it might even be rendering faster than the WPF version now! The new UWP text rendering engine also allows for more culture-sensitive logic involving caret movement, right-to-left text, etc.

Windows Forms

The new WinForms text rendering engine implementation is also faster than before and now supports culture-sensitive logic involving caret movement, right-to-left text, etc.

WPF

The WPF text rendering engine implementation has always been the most advanced one, and it's getting even better. It features improved efficiency and handles extremely long lines better.

Getting the WinForms SyntaxEditor on the Common Codebase

Per above, a key benefit of having a common API for text formatting/rendering is to finally make progress on migrating the WinForms SyntaxEditor to share code with the other newer platforms that already share a majority of code. This would mean that the WinForms version would get all the benefits of the more advanced add-ons found in the WPF version, etc.

This is huge for WinForms SyntaxEditor customers, and parity with the WPF version is something many customers have asked for.

Refactoring the SyntaxEditor Internals

In more recent weeks, we've been refactoring a lot of SyntaxEditor's internals that are related to views, including view management, splitting, scrolling, etc. We're building a new internal codebase for those features that works the same across WPF, UWP, and WinForms. And best of all, we're doing our best to keep the same public API as the current WPF version so that there will be minimal breaking changes.

The refactoring is going well thus far, but it is a long process since we're adding feature areas back in one by one with more efficient code and in numerous cases, with additional features. Here's some examples of improvements in the scrolling area…

Scrolling Improvements

Scrolling has been improved so that you can easily scroll an editor view to any line and even designate if that line should appear near the top/center/bottom of the view, and how far to pixel offset from that location. This will be wonderful for features like go to line.

When resizing an editor view that is scrolled to the right, if you now resize it even wider, the view lines will anchor to the right when appropriate to make sure not too much whitespace appears at the right side of the view. In the current SyntaxEditor implementations, the horizontal scrollbar wouldn't scroll at all in that scenario, leading to a lot of extra blank space on the right side of the view.

When vertically scrolling through documents with various view line widths, the current SyntaxEditor implementations will adjust the horizontal scrollbar maximum mostly based on the visible view lines' maximum width. The newer implementation tries to remember longer line max widths it's seen in the past and prevents a lot of the horizontal scrollbar maximum jumpiness that can happen when scrolling vertically.

Summary

We're really excited about where things are heading. Not only are we getting a better internal codebase for managing a lot of view-related features, we're adding features as we go, and are consolidating the WPF, UWP, and WinForms codebases such that they will share 95%+ of the code. This will allow for language add-on codebases to be shared across all platforms. And the public SyntaxEditor API changes for the WPF/UWP platforms will be kept to a minimum.

If you have any specific view-oriented features that you'd like to see in SyntaxEditor, now is the time to get your suggestions in.

We're chatting daily about progress in our Slack workspace and would love for you to discuss SyntaxEditor with us there.

Our v2017.2 WPF, Universal Windows, and Silverlight controls have all been updated with new maintenance releases that are now ready for download. It is highly recommended that you get these new builds since many products received numerous minor enhancements and bug fixes.

Let's take a quick look at some of the more notable features that were added.

Docking/MDI

The mouse wheel can now scroll document tabs when in an overflow situation and using certain tab overflow behaviors.

Editors

Updated the color pickers such that the end user can tap and drag anywhere in a hue ring or saturation/brightness square to change color attributes, and not just on the thumb.

Added a new drop-down to ColorPicker that allows switching between RGB and HSB text input modes.

Added new features for adding custom inline UI elements within edit boxes, like the "Now" button in the TimeEditBox below.

Improved the DateEditBox and TimeEditBox default formats to better support parsing of entered text values that lack part delimiters.

Grids

Added the TreeListViewColumn.SortDirection property and related ColumnSortDirection enumeration that can be used to indicate that a sort glyph should appear in the column header when paired with a custom sorting mechanism.

Improved TreeListBox to better handle property updates from view-models on other threads.

Improved TreeListBox selection tracking performance.

SyntaxEditor

Improved numerous edit actions to retain their final selection after the action goes through an undo/redo process.

Improved how Tab indenting is handled when there is a block selection.

Improved the Cut Line to Clipboard edit action to support multiple lines.

Improved the .NET Languages Add-on's logic for selecting the best IntelliPrompt parameter info member overload when typing a comma at the end of an argument list.

Improved the XML line commenter in the Web Languages Add-on to comment the entire line text when there is no selection.

Summary

There were also a large number of smaller improvements made throughout the products. See the announcement posts for the detailed list of enhancements and updates: