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

Creating an Improved WPF TreeView Control

by Avatar Bill Henning (Actipro) - 1 comment
Monday, March 14, 2016 at 8:11pm

PostBannerWPFControlsDevNotes

Anyone who has worked with the native WPF TreeView knows that its API is difficult to use (compared to the WinForms TreeView) and the performance isn't very good when binding to large large data sets.

We have started developing a completely custom implementation of a TreeView control that isn't based on the native TreeView control.  We'd love to get your input now during our design and prototyping phase on the following items:

  • What are the top 5 built-in features you would like to see implemented in a TreeView?
  • What specific pain points have you encountered with the native WPF TreeView?
  • What features/API would help resolve those pain points?
  • Any other features/functionality you think we should consider?

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 you can see what others are saying and throw in your two cents as well.

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

New Hotkeys in Docking/MDI

by Avatar Bill Henning (Actipro)
Friday, February 26, 2016 at 9:59pm

WpfControlsTipsBlogPostBanner

Quickly Selecting a Tab in the Same Container

Did you know that in the new 2016.1 version of our WPF Control's Docking/MDI product, you can quickly access another docking window tab in the same container by pressing Ctrl+[tabnumber]?  This also works in the Docking/MDI beta for Universal Windows.

TabbedMdi

For instance, in the tabbed MDI screenshot above, if I press Ctrl+2, the Document2.txt document would be selected.  And Ctrl+3 would select Document3.txt.

Ctrl+[tabnumber] will select the "normal" tab that has that tab index.  What if there are pinned tabs though?  Pinned tabs have an unpin button displayed on them and appear first in the tab list.  The same concept applies there but you'd press Ctrl+Alt+[tabnumber], where the tab number there is the tab index within the "pinned" tabs.

The same Ctrl+[tabnumber] keyboard shortcut will even work in docked tool windows when two or more tool windows are attached (tabbed) to each other.

Showing the Tool Window Container Options Menu

ToolWindowContainerOptionsMenu

The Alt+- keyboard shortcut will show the options menu for the current tool window, when the focused tool window is docked in a tool window container.

Showing the Tabbed Document Context Menu

TabbedMdiContextMenu

The Alt+- keyboard shortcut will also show a focused document's context menu when in tabbed MDI.

Showing the Tabbed MDI Document List Menu

TabbedMdiDocumentList

The Ctrl+Alt+DownArrow keyboard shortcut will display the document list menu in tabbed MDI.

Summary

These keyboard shortcuts are great for end users to be aware of and provide access to common docking functionality, all via the keyboard.

TaskLearnMore TaskDownload TaskBuyNow