WPF Controls 2020.1 Themes Goals

by Avatar Bill Henning (Actipro) - 7 comments
Tuesday, December 10, 2019 at 6:54pm

Actipro WPF Controls v2020.1 development is in progress, and the new version’s main goals are to modernize our themes and make theme customization much easier.

In today’s post, I’d like to provide some high-level information on some of the updates.

Theme Generation Concept

When an Actipro theme is activated, hundreds of brush and other resources are loaded and used throughout all our Actipro and native control templates.  This allows our themes to provide a cohesive appearance throughout all controls in your app.  Our WPF Controls ship with over 25 professionally-desired themes that match system, Office, and Metro themes.

In v2019.1 and earlier, all these theme resources are pre-defined by us in large XAML files and customers can customize individual resources or tint groups of them.  While these themes look great, it can be tedious to customize them if you don’t like the out-of-the-box look.

A primary focus of the 2020.1 WPF Controls is to move from our previous pre-defined themes towards themes that are generated at run-time based on theme generator options you set.  For instance, a main setting is the theme intent, which can be White, Light, Dark, Black, or HighContrast.  This tells the theme generator how the theme is meant to be used in general.  Then various grayscale and color ramps are generated based on configurable options.  All the highlight colors are based on colors generated in the color ramps.  There are options for things like the corner radius of tabs, whether the title bar uses an accent color (like in Office colorful themes), etc.

We are currently prototyping out this concept and so far, it’s working very well.  We will provide some screenshots once we are further along.  Please post your ideas on what kinds of options you’d like to have configurable in the comments below, as that will help guide us.  Now is the time to think big!

Modernizing Control Appearances

We have numerous ideas for bringing more modern control appearances to our new WPF themes.  Some of these, such as menu item checkmark updates, involve changes to our core control templates, both for Actipro and native controls.  Other modernization features will be optionally activated via properties set when generating themes.

WindowChrome, which allows any WPF Window to have advanced chrome features, is also getting a lot of enhancements that will be described in a future post.  These updates provide new functionality that wasn’t available before.

With several older themes being removed and other modernization template changes being made, we are finding that some of the brush and other resources used in our WPF themes are no longer needed.  We are working on consolidating brush resources where possible and removing unnecessary resources.

Older Themes

Luna and Classic

As part of the themes updates, we are going to be removing several very old themes that are outdated at this point.  These include the Luna themes (Windows XP appearance) and Classic theme (based on system colors and hasn’t been available in Windows 10 for years).

Aero and Office 2010

In a previous post, we had asked for feedback on whether customers still use Aero and/or Office 2010 themes.  Aero theme provided the Windows 7/Vista appearance, but Windows 7 is going end-of-life this month by Microsoft.  Office 2010 went mainstream end-of-life in 2015. 

We received feedback from several customers who still wished to use those themes in the foreseeable future, and we will be retaining those themes as options.  They are being consolidated into a separate optional Themes.Aero assembly that you will be able to reference and register at app startup.  This will allow us to keep our Shared Library smaller while still allowing the pre-defined Aero-style themes to be available for customers who wish to use them.

Aero Glass

With Windows 7 going end-of-life, we are removing support for transparent Aero glass features in our WindowChrome.  But as mentioned above, the Aero theme will still be fully available.


We’d love to hear your comments, especially what kinds of options you’d like to see on our theme generator. 

Actipro's WPF Controls

Over 100 UI controls for building beautiful Windows Presentation Foundation desktop apps.

Learn More

Over 100 UI controls for building beautiful Windows Presentation Foundation desktop apps.

Includes editors, docking windows, MDI, property grids, charts, tree controls, ribbons, gauges, themes, and much more.

Learn More Download Free Trial

Comments (7)

Posted 4 years ago by Dirk Zellerfeld

A main setting is the theme intent, which can be White, Light, Dark, Black, or HighContrast. [...] Then various grayscale and color ramps are generated based on configurable options

Oh I like that one! It was really much work going through all controls one by one theming them and verify everything looks like it should. If that is getting reduced to define a base schema and selecting a few colors only and all controls are gettin automatically themed by that, I would be super happy.

And when you mention WindowChrome I wonder if we are going to see a new window style as well? The current one is classic, customizable and absolutely okay in most scenarios and I wouldn't want to miss it but something more fresh / Windows 10 like would be gorgeous to have to choose from without having to hand-craft it.

Posted 4 years ago by Bill Henning (Actipro) - Actipro Software LLC

So far our v2020.1 WindowChrome updates have been geared towards more customization of the title bar area.  What specific style options are you looking for in relation to WindowChrome?

Posted 4 years ago by Dirk Zellerfeld

Since Windows 10 some modern applications have no strict separation of the title bar and the window content anymore. The Windows 10 Groove app is a good example of such a style which I've seen in a lot of other applications nowadays. While you can achieve the same already, it needs quite some work because of the current separation of title bar and window content.

My thought was maybe having certain base style template ready. A classic version, a modern version like in the Groove App without separation.

Posted 4 years ago by Bill Henning (Actipro) - Actipro Software LLC

Hi Dirk,

That's a great idea and good news... we already added that optional feature to WindowChrome several weeks ago (for the 2020.1 version) and it only uses a single template.  Keep more ideas like that coming!

[Modified 4 years ago]

Posted 4 years ago by Dirk Zellerfeld

That's super cool, really looking forward to it. Another idea or use case we ran into was a dialog system (pretty easy, create a new window => start location center owner => owner = main window and in code call ShowDialog) but we were told to put a semi transparent overlay onto the background of its owner window which started to make things difficult.

Lets say main window is 1024x768 and dialog window is 300x400 centered. Then the rest of the main window needs to be semi-visible by having a black screen with opacity 70% onto it so the dialog window shines out.

So just maybe the WindowChrome could get a WindowChromeChildren which has a parent property set to a WindowChrome and various styling possibilities "outside" of its own content but "inside" of the parent window content? One simple styling possibility could be to create a canvas with black background and opacity set to 0.7. Maybe people can use something like this to create some cool stuff like fading the parent window except of a specific control, creates an arrows that points to it and then show a children dialog to display some text.

Besides of something complicated than this, maybe the next version gets a styled dialog replacement for the messsagebox class with nice SVG icons? I believe THIS is going to be used by a lot of developers and likely doesn't need that much effort than my first time.

Posted 4 years ago by Bill Henning (Actipro) - Actipro Software LLC

Hi Dirk,

The overlay is something we've thought about too but haven't dug into yet.  We thought about something that would effectively cover all the content of the Window (such as a custom-specified Rectangle with semi-transparent black fill) other than perhaps the minimize/maximize/close buttons.  If we had that feature, you could just show a Popup or child Window over it and it should get the effect you want, right?

And a themed MessageBox replacement is another thing we had on our list to possibly do for 2020.1 as well.  Do you think it should just use the exact same API as the normal MessageBox?  Any other options you'd like to see with that?

Posted 4 years ago by Dirk Zellerfeld

Regarding your first question, that sounds exactly like we needed it to be. And regarding the messagebox I would stick to the same API (so first of all just themed). If there is still time I could imagine two improvements:

a) A messagebox that returns user input into a specific .NET type (would need to allow passing customer converters and validators). Example:

string result = MessageBox.Ask<string>("Please enter your name");

int result = MessageBox.Ask<int>("How old are you?");

int result = MessageBox.Ask<int>("Tell me a number between 5 and 10", input => input >= 5 && input =< 10);

b) A messagebox that lets us pass a usercontrol as parameter so we can for example show a message to a customer and let him pick something from a combobox.

Add Comment

Please log in to a validated account to post comments.