TreeListBox - Async Expansion, Inline Editing, and More

by Avatar Bill Henning (Actipro) - 3 comments
Thursday, May 5, 2016 at 10:22pm

PostBannerWPFControlsDevNotes

In the last blog post on our TreeListBox control development, we gave a list of features that have been implemented so far and showed a screenshot of sample usage with rendering customization.  In today's post, we'll show some more usage scenarios, will request your immediate input for drag/drop, and will give an updated feature list.

New Features

First, what's new since the last post?  We now have multiple options for governing if and when the determination of expander display is made for a node.  This is handy when you want to do minimal data model access checking for children, or when you know for certain that a node never has child nodes.

We now support optional async loading features where you'll be able to utilize a new RingSpinner control (or any other busy indicator) to relay a loading state to the end user.  Async loading means that potentially lengthy operations such as file or database access won't block the UI thread when expanding a node. 

Here's an example of async loading, where a simulated random delay is invoked when expanding each file folder:

TreeListBoxAsyncLoading

Notice how the UI remains fully responsive even while loading items.

Inline editing is fully supported when enabled.  Press F2 or single click on a node's content to enter edit mode where a new text value can be entered.  Pressing Enter or losing focus commits the value, while pressing Esc cancels the edit.

An event will fire when an item requests a context menu.  Dynamically create the menu for that particular item (or the entire multi-item selection).

Drag/Drop Feature Feedback Requested

Drag and drop is one of the last features we want to get in place before an alpha test version is prepared of the control.  This is a complex topic since it involves single/multi-selected items (that could be at various tree depths) being dragged and dropped at other depths, or even dragged externally.  Likewise, external items could be dragged onto the control.  We want to get your feedback now as we start on drag/drop features to ensure we meet all your needs!

Please either write our support address with your feedback or join our Slack discussion on the topic and chat right with us.  The benefit of the chat option is that we are posting screenshots and asking for feature input right during development.  It gives you an opportunity to give direct feedback and help guide features.

Feature Progress

Thus far these features have been completed ( marks new features since the last post):

  • Fully customize the appearance of each node.
  • UI virtualization, allowing for hundreds of thousands of nodes to be loaded into a tree very quickly.
  • No scrollbar jumpiness as seen in other virtualized tree controls when scrolling vertically.
  • Use your own custom data models as the source for the tree, with no dependencies on UI or our interfaces.  An adapter class is used (and can be fully customized to fit your model) to communicate between the UI and the model for things like expansion state, getting children, etc.
  • The adapter can be coded with bindings in XAML (convenient, yet can be slow in very large trees) or via method overrides (slightly more work but lightning fast).
  • Multiple display modes for node expanders.
  • Optional async loading with busy indicator display.
  • Events for expansion.
  • Events for selection.
  • Single or multi-selection, with Ctrl and Shift-based selection options.
  • Filter selection such as only allowing sibling nodes to be multi-selected, or nodes of the same depth.
  • All common tree hotkeys supported including special ones for expanding and collapsing entire branches.
  • Select or ensure nodes are visible by path.
  • Double-click and Return key default action handling.
  • Optional checkboxes within the data templates.
  • Intelligent text searching so when you start typing while the control has focus, it will auto-focus the item that matches the typed text.
  • Inline editing via F2 and single-click on a selected item.
  • Per-item context menus that can be constructed dynamically via an event.

Summary

The TreeListBox control continues to progress well and its feature set is coming right in line with the VS Solution Explorer's tree control's feature set.  We look forward to discussing drag/drop feature requirements with you via our ticket system or in Slack!

TaskWideContactUs TaskWideChatWithUs

TreeListBox - Progress and Checkable Nodes Sample

by Avatar Bill Henning (Actipro) - 1 comment
Thursday, April 21, 2016 at 8:56pm

PostBannerWPFControlsDevNotes

Last month we posted that we were beginning development of a new TreeView replacement control that addressed the many shortcomings of the native WPF TreeView, and were asking for input at that time.  We've been working on this control for both WPF and UWP and have made very good progress.

Feature Progress

Thus far these features have been completed:

  • Fully customize the appearance of each node.
  • UI virtualization, allowing for hundreds of thousands of nodes to be loaded into a tree very quickly.
  • No scrollbar jumpiness as seen in other virtualized tree controls when scrolling vertically.
  • Use your own custom data models as the source for the tree, with no dependencies on UI or our interfaces.  An adapter class is used (and can be fully customized to fit your model) to communicate between the UI and the model for things like expansion state, getting children, etc.
  • The adapter can be coded with bindings in XAML (convenient, yet can be slow in very large trees) or via method overrides (slightly more work but lightning fast).
  • Events for expansion.
  • Events for selection.
  • Single or multi-selection, with Ctrl and Shift-based selection options.
  • Filter selection such as only allowing sibling nodes to be multi-selected, or nodes of the same depth.
  • All common tree hotkeys supported including special ones for expanding and collapsing entire branches.
  • Select or ensure nodes are visible by path.
  • Double-click and Return key default action handling.
  • Optional checkboxes within the data templates.
  • Intelligent text searching so when you start typing while the control has focus, it will auto-focus the item that matches the typed text.

Sample Usage

Here's a screenshot of a recent sample being put together for the control:

TreeListBoxChecking

In this sample, we have two levels of nodes.  The top-most level is folders (whose icons actually toggle with the expand/collapse state), while the inner level has checkboxes and buttons that allow for a dialog to be displayed when clicked for further configuration.

Double-clicking a folder item will toggle its expansion state, while double-clicking a checkable node will toggle its checked state.  This sample also shows usage of a DataTemplateSelector to pick which DataTemplate to use for each node.

Summary

The control is coming along really nicely and our goal is to match general features found in the VS Solution Explorer.  The features above are implemented for both WPF and UWP.  We still have more features planned before we open up a beta. 

If you have any other suggestions, please either write our support address with your feedback or join our Slack discussion on the topic and chat right with us.  The benefit of the chat option is that we are posting screenshots and asking for feature input right during development.  It gives you an opportunity to give direct feedback and help guide features.

TaskWideContactUs TaskWideChatWithUs

WPF Controls 2016.1 Build 631 Released

by Avatar Bill Henning (Actipro)
Friday, March 11, 2016 at 3:27pm

WPF-16.1.0631-BlogPostBanner

WPF Controls 2016.1 build 631 has been released and is now available for download.  This build contains numerous minor features, updates, and bug fixes across the various WPF control product range. 

It is highly recommended that v2016.1 customers upgrade to this build since it fixes all issues that have been discovered in the major Docking/MDI control updates that were part of the first 2016.1 release.

The first 2016.1 release added new Metro themes that have accent colors, like in the screenshot below.

RibbonQATButtons

The QAT buttons on the upper left of the window were originally wider in Office 2016, matching the width of the system minimize, maximize, and close title bar buttons.  However in the most recent Office 2016 update, the QAT button width was reduced and we've updated their size in this build to match.

See the announcement post for the detailed list of enhancements and updates in this build.

Do you want to chat with us about what we're working on next?  Register to join our Slack team and help guide our future development efforts!

TaskLearnMore TaskDownload TaskBuyNow

WPF, Silverlight, and WinRT/XAML v2014.2 Maintenance Releases

by Avatar Bill Henning (Actipro)
Wednesday, December 17, 2014 at 10:55am

20142MaintReleaseBlogPostBanner

New maintenance of the 2014.2 versions of our WPF, Silverlight, and WinRT/XAML controls have been released and are now available for download.

Major new features are described below.  See the announcement posts for the detailed list of enhancements and updates, including many items not listed below:

ProductHeadingGenericEditors

ISO 3166-1 Alpha-3 Codes Added (WPF, WinRT only)

The Country class, which contains ISO country data and is utilized by our CountryComboBox control, now also includes the 3-character alpha code data for each country.

CountryComboBox

This is in addition to the existing data of 2-character alpha code and name.

ProductHeadingGenericPropertyGrid

Handling of Root Objects Improved (WPF only)

We've improved how the PropertyGrid handles properties on the root SelectedObjects that have a custom type converter.

Handling of Immutables Improved (WPF only)

We've also improved support for handling immutable objects and determining how to interact with their properties.

Custom Factory Sample Updated (WPF only)

The Custom Factory sample has been updated to show a property with a non-string type.

PropertyGridCustomFactorySample

This is a great example of showing how to implement a custom data factory and merge properties from various object sources.

ProductHeadingGenericRibbon

Backstage Tab Navigation Improved (WPF only)

We've improved keyboard navigation in the TaskTabControl control, which is generally used within Backstage tabs.

Contextual Tab Layout Refined (WPF only)

The logic for the sizing of contextual tab groups and their tabs always has had some minor issues when resizing the containing window to be thinner.  The issue didn't often manifest itself unless multiple contextual tab groups were displayed.

RibbonContextualTabs

We spent a while tracking these issues down and fixing them so that all layout sizing is now perfect, as seen in the screenshot above.

ProductHeadingGenericSyntaxEditor

Read-Only Regions Added

We've added support for read-only regions of text via the new IReadOnlyRegionTag tag.  This feature has been highly requested by customers, so we're happy to deliver it.

SyntaxEditorReadOnlyRegion

There is a ReadOnlyRegionTag implementation class that supports classification so that read-only regions can be rendered with an alternate background, such as gray in the screenshot above.  A new Read-Only Regions QuickStart that demos the new features is now in the Sample Browser.

Move Selected Lines Up/Down Commands

Another highly-requested set of commands for moving the selected lines up (via Alt+Up) and down (via Alt+Down) have been added.  The SDI Editor demo's menu has been updated to show off the new editor commands.

IntelliPrompt Completion Performance Enhancements

We did a lot of performance profiling related to IntelliPrompt completion lists and we able to make numerous performance enhancements in the areas of item matching and filtering.  These enhancements will really help performance when displaying large completion lists.

Drag and Dropped Text Reselection Option Added (WPF only)

A SyntaxEditor.IsDragDropTextReselectEnabled property has been added that can be set to false to prevent reselection of dropped text.

Data Binding Change Scroll Behavior

Views have been updated so that text changes from a data bound source (such as view model) don't scroll the view back to the first line on each update.

Line Commenter Updated

The line commenter has been updated to improve how line comment and uncomment features affect selection.  The logic that gets activated by the LineBasedLineCommenter.CanCommentEmptyLines property also has been improved.

Bi-Di Text Caret Movement (WPF only)

We've made several improvements to caret movement when editing bi-directional text.

Better Separation of UI/Document Models

All of the event ties between the UI and document models have been changed to use weak events.

.NET Languages Add-on

The ability to resolve references to nested types has been improved.

Web Languages Add-on

A completion item for closing the nearest open ancestor element, if any, has been added.  (WPF only)

SyntaxEditorCloseTagCompletion

Ctrl+Space after an end tag start delimiter will also auto-complete the matching start tag's name.  (WPF only)

We've also improved the editing experience when typing to not affect outlining nodes as much.

ProductHeadingGenericShared

Wave and ZigZag Shapes Added

New primitive shapes have been added that can be used to create some interesting user interface elements in your apps.  The Wave shape renders a wavy line.  The ZigZag shape renders a zig-zag line.

ZigZag2

The Shapes QuickStart has been updated with examples showing usage of the new shapes.

TaskDownload TaskLiveDemo TaskBuyNow

PropertyGrid Improvements and Custom Property Editors

by Avatar Bill Henning (Actipro)
Thursday, October 23, 2014 at 12:02pm

PostBannerWPFControlsDevNotes

Our WPF PropertyGrid control is an extremely powerful way to edit the properties of any object.

Custom Property Editor Sample

While a lot of PropertyGrid usage is for basic properties such as numbers, strings, dates, etc., properties can be of any custom Type as well.  In our most recent release of the WPF controls, we created a new custom property editor sample that shows how to easily add a custom property editor for a certain Type.

PropertyGridCustomEditor

The screenshot above shows how a custom enumeration named OnOffAuto was created.  The object being edited in the PropertyGrid has several properties that are of that type.  We defined in XAML a custom template that uses our HorizontalListBox control to allow for easy selection of the options.

In the case of the Security Alarm property, we made a further customized property editor template that only shows two of the options instead of all three.  This specialized template is configured to only apply to that one specific property.

While this sample shows how to make a custom property editor for an enumeration type, the same concepts can be applied to any custom type.

Other Recent PropertyGrid Improvements

In recent builds, we have further improved the editing experience when using PropertyGrid.  We added built-in property editors for font-related properties.  We added support so that double-clicking a property name will cycle through any standard value options that the property has.  In the event that the property doesn't support standard values, double-clicking the property name will attempt to focus the related editor instead and select all text if possible.

Summary

Download the latest build of our WPF controls to see this new sample and obtain the latest editing features.

TaskDownload TaskLiveDemo TaskBuyNow