Tweets by @Actipro
Please take some time to learn more about us and our product offerings.
Our WPF Docking/MDI control product allows you easily add docking tool windows and a MDI (multiple document interface) to your app, one that mimics Visual Studio. We have two built-in MDI options: tabbed and standard. Tabbed is similar to the style that current Visual Studio versions use. However some customers still prefer to use the classic windowed style of MDI that we call "standard MDI".
There is no built-in standard MDI mechanism in WPF, but we provide a complete implementation in Docking/MDI with all the functionality like cascading and tiling that you would expect.
We just had a customer ask how they could animate a standard MDI window into place when it's first loaded.
We did a quick experiment in our 2016.1 version using a simple implicit Style and it worked great. Here's the results:
The animation we defined quickly fades in the window and "pops" it into place. This animation matches the animations we use elsewhere in the product such as when dock guides appear while dragging docking windows around.
Here's the code that you can place in your app's Resources to get the animation above to appear:
<Style TargetType="docking:StandardMdiWindowControl"> <Setter Property="Opacity" Value="0" /> <Setter Property="RenderTransformOrigin" Value="0.5,0.5" /> <Setter Property="RenderTransform"> <Setter.Value> <ScaleTransform ScaleX="0.8" ScaleY="0.8" /> </Setter.Value> </Setter> <Style.Triggers> <EventTrigger RoutedEvent="docking:StandardMdiWindowControl.Loaded"> <BeginStoryboard> <Storyboard> <DoubleAnimation Storyboard.TargetProperty="Opacity" To="1" Duration="0:0:0.2" /> <DoubleAnimation Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleX)" To="1" Duration="0:0:0.2"> <DoubleAnimation.EasingFunction> <BackEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> <DoubleAnimation Storyboard.TargetProperty="RenderTransform.(ScaleTransform.ScaleY)" To="1" Duration="0:0:0.2"> <DoubleAnimation.EasingFunction> <BackEase EasingMode="EaseOut" /> </DoubleAnimation.EasingFunction> </DoubleAnimation> </Storyboard> </BeginStoryboard> </EventTrigger> </Style.Triggers></Style>
Download our WPF Controls and give it a try!
Today we published a WPF Controls maintenance release v2016.1 build 635. The updates are described in detail in this post. It is highly recommended that you download this maintenance release since it fixes several issues that popped up with the Docking/MDI product and makes several other minor enhancements as well.
We are now at a stage where we are about to start prepping our codebases for the upcoming 2017.1 version. Over the past few months, we've been working on an array of new and revised controls for that version, and will begin merging all that in over the coming weeks. Look for a beta testing request announcement in very early 2017.
Everyone, please have a wonderful holiday season and happy new year!
Very large maintenance releases of our v2016.1 WPF, Universal Windows, and Silverlight controls have been released and are now available for download.
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 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.
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.
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:
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.
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.
A text formatter for the JSON language has been implemented that beautifies the JSON data.
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.
All products received numerous other minor enhancements and bug fixes. See the announcement posts for the detailed list of enhancements and updates:
Maintenance releases of our v2016.1 WPF, Universal Windows, and Silverlight controls have been released and are now available for download.
Docking/MDI for WPF and UWP has several new options that give you more control over UI appearance. Tab text on tabbed MDI tabs will now trim long text with ellipses in the middle, instead of the end, allowing for filenames to be more readable.
SyntaxEditor's completion and parameter info providers in all language add-ons now allow you to intercept OnSessionOpening, even when no items were pre-populated, so that you can add your own custom items/info. Cut, copy, paste, drag, and drop all now support the block and full line flags that are compatible with Visual Studio. The Python Language Add-on added a text range property to all type and function definitions, allowing you to implement features like go to definition easier.
The Shared Library added a new RingSpinner control that is an animated ring where the two ring segment ends chase each other around the circle. It's great for display while performing a lengthy operation.
Universal Controls 2016.1 build 303 has been released and is now available for download. This version adds a beta of our Docking/MDI product, making it possible to include docking tool windows and/or a multiple-document interface in your apps for Universal Windows apps. SyntaxEditor also includes two new Metro-themed image sets that can be used.
The Docking/MDI beta included in this version includes nearly all the docking window functionality found in the WPF version of our Docking/MDI controls. Be sure to check it out and let us know what you think.
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!
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.
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.
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.
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.
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.
The Alt+- keyboard shortcut will also show a focused document's context menu when in tabbed MDI.
The Ctrl+Alt+DownArrow keyboard shortcut will display the document list menu in tabbed MDI.
These keyboard shortcuts are great for end users to be aware of and provide access to common docking functionality, all via the keyboard.
A couple weeks back, we released our first set of Universal Windows controls. And right before that, all the work we've been doing on Docking/MDI for WPF (codenamed vNext) the past few months was released as part of our 2016.1 WPF Controls. Docking/MDI's internals were rewritten from scratch to support all the latest docking window oriented functionality found in apps like Visual Studio 2015 and the feedback on the new version has been tremendous.
Here's the really exciting part for Universal Windows app devs… Part of that vNext rewrite was to also ensure that the same Docking/MDI API and design would work in Universal Windows apps! And today we are formally announcing that we are looking for beta testers to try it out.
This SyntaxEditor and Docking/MDI combination screenshot shows a tabbed MDI and tool windows docked around it:
Are you making a Universal Windows line of business app or any other app that would benefit from docking tool windows and/or a fully-managed tabbed or windows multiple document interface? Then look no further. The Docking/MDI product for Universal Windows has nearly the entire feature set of the amazing WPF version!
If you'd like to help beta test this brand new product for your Universal Windows app, e-mail our support address to request beta access. In your email, please give us an overview of the app you're developing and how you plan to integrate docking windows and/or MDI into it.
A while back, we created a sample for showing how a hosted Windows Workflow Designer instance could be integrated with Actipro WPF controls within a custom WPF application to provide a very elegant interface for end users.
With the release of the 2016.1 version of our WPF controls, we've updated the sample again. Note how it now takes advantage of one of our new Office-like themes announced in yesterday's post:
Our Docking/MDI product is used to provide the tool window and multiple document interface. Our SyntaxEditor code editor control, in single line edit mode, is injected as a custom expression editor. When you combine SyntaxEditor with our .NET Languages Add-on, you are able to have it support powerful IntelliPrompt completion lists. For instance, in the screenshot above, you can see the itemCount variable is showing up in the completion list since it was declared below. Our Themes product is used to provide a modern Metro style for all Actipro and native WPF controls.
When you put it all together, it's very easy to integrate Actipro WPF controls with rehosted Windows Workflow Designer instances in your applications. It only takes a few minutes to get up and running, and once you do, the result is well worth the time.
If you rehost the Windows Workflow Designer in your WPF apps and would like our example, please contact us and we'll be happy to share it with you!
For those customers who downloaded either of the prior versions, this update is at the same URL as before.
The 2016.1 version of our WPF Controls is now here and it's a whopper. It contains all of the extensive new feature development work we've done on Docking/MDI over the past several months and have blogged about under the codename Docking/MDI vNext. It also has 14 new Office-like themes that match the Colorful and White themes found in the various Office suite applications. Now you can make your own apps look just like Office 2016! SyntaxEditor adds new Metro light and dark image sets that can be used within IntelliPrompt for a more modern appearance. Many other minor tweaks and improvements have been made across the product range as well.
See the entire lengthy detailed update list in our announcement post.
Please note that 2016.1 does have several breaking changes to support better API design and features, so be sure to read the "Converting to 2016.1" topic in the documentation that comes with the controls. It walks through everything in detail.
We've been blogging about some of the major new features coming to Docking/MDI vNext, and those are now here, along with many others. We'll dig in deeper in future blog posts but here's a taste of what's new.
The Docking/MDI product has completely rebuilt product internals, which are optimized and now support next generation features found in Visual Studio 2015. All UI control styles/templates have been rebuilt from scratch to be simpler and easier to customize. All UI now works with all forms of pointer input: mouse, touch, and pen. We've refactored and centralized focus handling and setting logic. We've refactored magnetism handling. We rewrote UIA to ensure better compatibility with Coded UI Test. All samples have been updated/improved, and new samples added to concisely show features.
Even though much of the product internals have been rewritten, most of the public API remains the same as before other than some type member renamings. The "Converting to 2016.1" topic walks through any breaking changes you encounter.
We also include the "old" 2015.1 variation of Docking/MDI in the WPF Controls download as "ActiproSoftware.Docking.Legacy.dll". This 2016.1 version of the old assembly can be used while you transition to the newer API.
Quick subtle animations have been updated and added throughout the product to give it a more vibrant feel. Dragging tabs uses smooth animations, dock guides and drop targets pop into place, and auto-hide popups slide in and out. All of these animations are designed to be fast and pleasing.
We've created a new AdvancedTabControl control that extends the native TabControl while adding many new features (appearance customization, animation, multiple tab kinds, new tab buttons, etc.), and is used as the primary UI mechanism within the ToolWindowContainer and TabbedMdiContainer templates. It can be used independently of docking windows too, in your own normal windows.
Layout logic has been updated to try to adhere to optional new desired, minimum, and maximum docked size hints on docking windows when space is available. For instance, you can say that you prefer to not let a tool window's container get smaller than 200px high. As long as space is available, the layout logic will do its best to adhere to that request. You can set minimum/maximum size hints the same to suggest a fixed size.
Also related to container sizes, when a layout is sized very small, then grows larger again, the original docking window sizes are restored.
A problem in the old version was the dragged splitter highlights didn't render above interop (WinForms, etc.) content due to WPF's airspace issue. This scenario now works as expected when interop support is enabled.
Several DockingWindow members have been added to designate preferences for initial dock location when opened, such as with other windows in a group, on a specific side, or at a dynamic location based on an event handler's logic. Best of all, the properties can all be bound to view-models, allowing you to fully designate initial locations for docking windows purely via MVVM.
A new optional property lets you specify alternate text to render on tabs, generally shorter than the Title text. This is useful in scenarios where your tool window titlebar might have contextual information "Error List - 7 Errors" but your tab should only show "Error List".
Flash effects were supported in the old version via an attached behavior found in the samples, but now tinting and flash effects are first-class citizens via easy-to-use properties right on DockingWindow. Strobe and smoothly animated flash options are both available.
A new property is available for setting a docking window's tab tooltip content. Tabs can now be set to display on any side of a container, not just top and bottom. All tabs can now be middle-clicked to close them.
New properties have been added that allow custom content like buttons or status indicators to be easily injected into title bars and tabs.
A new property has been added that can uniquely identify a docking window with any string value, instead of using the Name property as before, which was limited to identifier syntax. A new properly can prevent a docking window from being included in layout serialization.
Floating windows now support Aero snap when dragging, meaning you can drag to the top of the screen to maximize the window, etc. When dragging a tab to float, as long as the docking window can float, it will instantly detach and track in a floating window with the mouse. A new option allows you to indicate you want to only use float previews instead of live-dragging windows.
When documents are floated, they now enter a full-fidelity secondary MDI area where other documents can be attached, and even tool windows can be docked around. This is great for use with multiple monitors. Properties are available for setting the icon and title of these floating windows.
A new property has been added that determines what minimum amount a floating window must be visible to avoid being snapped to screen. Partially-visible floating windows will now snap to this minimum threshold as appropriate.
A new event allows you to later and limit a floating window's initial size.
Tabbed MDI has three modes of tab display (normal, pinned, preview), which are similar to those found in Visual Studio 2015. New context menu options are availble such as "Close Others", "Close All Documents", "Pin Tab", etc.
A new tab button can optionally be shown and an event handled in response to add a new document. This allows for UIs like Google Chrome.
TabbedMdiHost now has a property for setting a DataTemplate that displays when there are no documents open.
Dock guides now show over standard MDI so that dragged windows can be dropped into it. A context menu is now available when clicking a standard MDI window's icon or right-clicking its title bar.
An option is available to perform automatic size-to-content when adding a docking window to standard MDI.
All docking window standard MDI layout properties have been refactored and made more straightforward to access.
Many improvements in the area of MVVM have been made. Properties like IsOpen, IsActive, IsSelected, and State are now fully settable and can be bound to view models. Default locations (see above) can be specified via new properties designed for MVVM compatibility.
MVVM implementation has been improved to be more straightforward since docking windows are now the actual container of their content, instead of being represented in UI as a tab.
In MVVM usage, unregistered windows will now automatically attempt to remove themselves from the appropriate DockSite items source property if a new related option property remains true.
Docking windows can be defined in XAML and have their IsOpen property set (or bound to a view model property) to false to close them on initial dock site load, but leave behind a breadcrumb for future restoration.
The standard switcher UI has been improved to a new, more modern user interface that animates on display and supports scrolling when there is overflow.
Multiple new standard switcher properties have been added to allow for full customization of its appearance.
The Prism sample has been updated to use Prism 6.1 and includes all source for Prism integration right in the sample instead of in a separate interop assembly.
Seven new accent color variations of the MetroLight theme have been added that render similar to the Office 2016 Colorful theme. Seven new accent color variations of the MetroWhite theme have also been added that render similar to the Office 2016 White theme
Now your WPF apps can render exactly like Office 2016 apps.
WindowChrome title bar buttons in Metro themes have been updated to use the larger, crisper Windows 10 style.
In previous versions, Metro themes were shipped in their own assembly that required referencing and registration during app startup. In 2016.1, the Metro themes are built directly into the Shared library and no longer require registration. Further, MetroLight will be the default theme on Windows 8.x/10 systems.
Since Windows XP is past its support lifetime, we moved all Luna themes out of the Shared library and into their own separate library, similar to how Metro themes used to be. That library must be referenced and those themes specifically activated if you wish to continue using them.
The changes mentioned above are minor breaking changes (see our documentation for upgrade steps) but better support newer Windows versions and also reduce the overall size of the Shared library.
The new accent color MetroLight themes that render similar to Office 2016 require the use of white monochrome icons in certain locations such as the upper QAT, tab panel, and status bar. Features have been built into the ribbon button themes to automatically do this conversion for you.
Simply use standard color Metro-styled icons and they should be automatically converted to pure white when appropriate for you without you needing to do anything. Note how this has occurred for the QAT buttons in the screenshot to the right.
New MetroLight and MetroDark image sets have been added for use with IntelliPrompt. The current set can be selected via the new static CommonImageSourceProvider.DefaultImageSet property.
Use the appropriate image set based on the current application theme. The screenshot above shows the Classic, MetroLight, and MetroDark image sets within a completion list.