The Actipro Blog

All the latest UI control development news from Actipro

Grayscale Disabled Images in WPF

PostBannerWPFControlsDevNotes

The most recent 2016.1 release of our WPF Controls added a new DynamicImage control.  This is a drop-in replacement for Image that will auto-grayscale the image content when the control is disabled.

Grayscale Images in Disabled Ribbon Buttons

Ribbon buttons have all been updated to automatically grayscale their images when they are disabled.

RibbonDisabledButtons

The left ribbon has enabled buttons and the right ribbon has several disabled buttons

Grayscale Images in Disabled ToolBar Buttons

ToolBar buttons (if our native control themes are applied) have also all been updated to automatically grayscale their images when they are disabled.

ToolBarDisabledButtons

The left toolbar has enabled buttons and the right toolbar has several disabled buttons

Summary

In the past, the above disabled buttons would show their images with some transparency but would retain the color.  Having images auto-switch to grayscale ensures that they truly reflect a disabled state.

These features are in the latest 2016.1 maintenance release, available now.

TaskDownload TaskBuyNow

Tags: ,
Filed under: Actipro, New features, WPF

SyntaxEditor Line Modification Mark Enhancements

PostBannerSyntaxEditorDevNotes

The latest maintenance releases of our v2016.1 WPF, Universal Windows, and Silverlight controls had some major work done on SyntaxEditor's line modification marks feature.  In fact, its internal logic was completely rewritten and improved.

Overview

Line modification marks use colored bars in the selection margin to tell the end user whether changes have occurred on the line, and whether those changes have been saved.

This animation shows this feature in action:

SyntaxEditorLineModificationMarks

New changes will turn the marks yellow to reflect that those lines are “dirty” (unsaved).  If you then "save" the document (which I do above after typing on two lines), the marks turn green to indicate they are now saved.

While the yellow and green marks were present in older versions, there were some bugs that could occur with their tracking over the course of multiple text changes.  Those bugs have been fixed in this latest maintenance release.

In addition we also have added orange marks, that occur when you undo past the save point.  They show anything that is different from what was saved but is not different from the document when it was originally opened.

Summary

These great new features match exactly with what is in Visual Studio and are wonderful for end users.  Grab the latest 2016.1 builds to add them to your own apps!

TaskDownload TaskBuyNow

WPF, UWP, and Silverlight v2016.1 Maintenance Releases

Maintenance16.1.BlogPostBanner

Very large maintenance releases of our v2016.1 WPF, Universal Windows, and Silverlight controls have been released and are now available for download.

Grids

We've been blogging about our new TreeListBox and TreeListView controls for a little while now.  They have been in private alpha testing and now we have placed the alpha test in a new public Grids assembly that has shipped in this WPF and UWP maintenance release.

TreeListBox

TreeListBox is a TreeView-like control but has many advanced features like those found in the Visual Studio Solution Explorer.  See this blog post for some details on the feature list.

TreeListViewColumnReordering

TreeListView inherits TreeListBox and includes all of the tree hierarchy features found in it.  It also displays each row similar to a ListView, columns and all!  This blog post summarizes the features found in this control.

With this public alpha release of the controls, you are able to start using them and can provide us with feedback.  We'd love to hear from you, whether it be via our ticket system or Slack.  Our plan is to finalize them for the 2017.1 version, but they should be pretty stable for usage now.  Anyone with a WPF/UWP Studio or PropertyGrid license should be able to use them immediately under your existing 2016.1 license.

Going forward, we have already made major progress on rewriting our PropertyGrid control and basing it on TreeListView.  So far, performance tests are showing that it's loading large property trees almost instantly.  We'll blog more on this in the upcoming weeks.

Docking/MDI

There were a lot of tweaks and bug fixes in this build for the Docking/MDI product.  We recommend you grab the latest if you use Docking/MDI. 

There were numerous improvements too, including some more major ones like:

  • A new option to prevent a tool window from being dragged to a floating MDI area. 
  • A new option to prevent auto-selection of tabs when there is a system drag over them.
  • System drags will only auto-select tabs following a brief delay when you hover over the tab.
  • More programmatic docking methods.
  • Improved "active" appearances when focus moves to other focus scopes.
  • Improved focus tracking, especially with HwndHost-based interop controls.
  • Improved handling of MVVM with linked dock sites, even allowing the view models to be automatically moved to the target dock site.

SyntaxEditor

Line modification mark tracking logic has been completely rewritten.  It now works much better and even introduces new orange marks that track "reverted" changes, similar to how the Visual Studio editor does.

SyntaxEditorLineModificationMarks

We added the ability for a programmatically created text change to merge into previous text change on the undo stack.  This allows you to chain additional text changes onto previous ones and have them be undoable as a single unit.

We added a new property that can be set to false to only allow backspacing over a single character when the document's AutoConvertTabsToSpaces is true.

The PasteDragDrop event is now also raised drag over events so that the drag effects can be manually altered.

The ITextChange.CustomData property is now settable so it can be updated after the text change was created as needed.

SyntaxEditor Web Languages Add-on

JsonTextFormatting

A text formatter for the JSON language has been implemented that beautifies the JSON data.

Shared Library

GrayscaleImages

We added the DynamicImage control, which is a drop-in replacement for Image that will auto-grayscale the image content when the control is disabled. Going along with this, we updated ImageConverter to return a DynamicImage instance instead of Image.  Our toolbar, menu, and Ribbon control themes have been updated to use DynamicImage so that you get grayscale effects on images out-of-the-box.  Note how the cut, copy, and undo buttons are all grayscale when disabled in the screenshot above.

If you encounter a 'Could not find a part of the path' to bitmap image source error after upgrading to this version, specify the absolute path to the image source using pack syntax as described in the DynamicImage documentation instead of using a relative path.

We moved ImageToMonochromeConverter from our Ribbon assembly to Shared and renamed it to ImageSourceContentConverter.  Along the way, it was updated to work on vector GeometryDrawings too.  We added an attached ImageSourceContentConverter.CanConvertToMonochrome property, which can be set on portions of a DrawingImage that shouldn't be converted to monochrome, such as areas that display a selected color.  We also added a ImageSourceContentConverter.Mode property that sets whether to convert to grayscale (default) or monochrome.

Summary

All products received numerous other minor enhancements and bug fixes.  See the announcement posts for the detailed list of enhancements and updates:

TaskDownload TaskBuyNow