Due to user feedback, I created a sample that shows how you can use ContentControl3D to host content in the cells of the Infragistics XamDataGrid. I really like this idea, and think it has a lot of potential in many different kinds of applications. It allows you to compress a lot of information into one column in the data grid. The following screenshot from the demo app shows two records: one is showing the front side of a ContentControl3D, the other is showing the back side (the edit form)…

You can download this demo app from the Releases page of the Thriple project. The demo app requires that you have the Infragistics NetAdvantage for WPF product installed (trial version or regular version) in order to run it.

In response to a question about ContentControl3D, I added a new feature tonight. The scenario that the user asked about involves making several ContentControl3Ds rotate to the back or front side in response to the user selecting an option in the UI; not by clicking on each ContentControl3D. For example, suppose you have several ContentControl3Ds in a list, and you want to have them all rotate at once to show what’s on their back sides. The question was: how can one implement this, such that ViewModel objects associated with the ContentControl3Ds can cause the rotations to occur?

The user asked if I could make the read-only IsFrontInView dependency property read-write. Due to some complications around the semantics of that property, I could not take that approach. Instead, I added a RotationDestination enum, and allow the RotateCommand to accept a RotationDestination value as the command parameter. The new ‘Rotation Destination’ sample shows how to implement the requested scenario. For more information about why I took this approach, read the discussion thread that prompted this change.

You can download the latest Thriple source code, which includes ContentControl3D and the samples, here.

Charles Petzold hit a homerun! His ‘Writing More Efficient ItemsControls‘ article in the March 2009 issue of MSDN Magazine is the first treatment I’ve ever seen on how to analyze and address performance issues related to the use of DataTemplates and ItemsControls. He uses empirical evidence to identify performance issues related to a DataTemplate, and shows various ways to improve them.

After reading the article, I am definitely going to go through some templates I’ve created and reassess them. If you are interested in keeping your WPF applications running quickly, I suggest you check it out.

In the recent past, I worked quite a bit on a new Samples Browser application for the Infragistics Silverlight Data Visualization product. This post is not intended to be a plug for the product, but I want to point out the application’s UI navigation design. I can’t take credit for dreaming this one up (props to Grant for that), but I implemented most of it and added some goodness to the design along the way. Naturally, I didn’t do any of the visual design work — which should be obvious, considering how good this thing looks! 😀

When you first load the application up, it looks like this (click on the following images to see them at full size):

This screen allows you to either check out some “showcase samples” or to view demos for each of the four controls in the product, which are represented by “boxes” toward the bottom. Also notice the start of a breadcrumb trail toward the top, which currently only has an item in it for “Home.” Now suppose you were to click on the XamWebMap box down below. An animated transition would bring you to this screen…

Each item in the list represents a sample for the XamWebMap control, and even has a thumbnail image next to it. Since there are currently ten samples available for XamWebMap, and this view only shows eight items at a time, you can click the arrow button on the right side to slide the other samples into view…

Notice that the breadcrumb trail above now contains the selected control as the next item in the list, in this case “XamWebMap.” If we were to select one of the map samples, the breadcrumb trail would then contain the selected sample in view, like this…

Now here’s where it gets really cool. The breadcrumb trail also provides dropdown lists to make it easier to jump to the exact content you are interested in, if sliding from sample to sample isn’t what you want to do. Here’s what happens when you click on the breadcrumb item for the selected sample…

You could also click on the middle breadcrumb item’s dropdown indicator to get a list of the available controls, and then see a tiled view of that control’s samples. Pretty slick, eh?! As you can probably tell, I’m really proud of how this app turned out. 8)

One more point of interest is that you can view the XAML and C# code for each sample. When you’re viewing a sample, click on the “CODE” icon in the top right corner of the sample and the sample will perform a 3D flip to reveal the XAML/Code view…

While this wasn’t a trivial user interface to implement with Silverlight 2, it wasn’t that hard. I think it provides an excellent user experience, especially because of the smooth transitions from content to content, and the ability to either browse or navigate directly to something.

I recently published a new project on CodePlex called Thriple. It contains 3D components that you can easily add to your WPF user interfaces. As of version 1.0, Thriple contains my old Panel3D layout panel, and my new ContentControl3D. I have put a lot of time and effort into making ContentControl3D a highly reusable, customizable control. I’m very happy with how it turned out, but be sure to read the Known Issues section on Thriple’s Release page.

The source code download also contains sample applications that show the components in action. If you want to check it out, here’s the link: http://thriple.codeplex.com/