2008 Silverlight Year-end Wrap Up
We had the pleasure of working on some significant Silverlight projects over the last year, one of which included building a plug-in to Microsoft Expression Encoder.
The project in a nutshell was creating a Silverlight 2.0 video/audio player that synced with PowerPoint slides and visual chapter points. Imagine a live presentation in which a speaker is showing PowerPoint slides and the cue cards they hold in hand are the chapter points to be discussed.Now imagine an online version of this presentation in which the speaker was pre-recorded and their cue cards exposed alongside the PowerPoint slides they are referencing – this is what we built.
A list of chapter points as well as thumbnails of PowerPoint slides and other supporting media are available for the viewer to navigate forward and backward in the presentation, in addition to the normal player controls on the video/audio itself. Any of the three navigation areas selected will sync the others to the correct point in the presentation. Pretty cool!
Another cool part of this project was making it so the presentation could be assembled and output from Expression Encoder. We built a plug-in that enabled the user to associate chapter point text and other visual media with markers in the video/audio and then export it to the Silverlight Presentation template we created, which could either be hosted online or run locally via an EXE.
It was a fun and invaluable experience, but still a rough ride. The project spanned 3 iterations of Silverlight releases (Alpha 1.1, Beta 1, and Beta 2), which continually required updates to the code and the use of preview versions of both Expression Blend and Encoder. And unfortunately there was not much in the way of support in the skinning department for Expression Blend just yet.
Luckily with the release of Silverlight 2, came many improvements to Expression Blend, adding support for the new Visual State Manager which allows designers to create interactive mouse states (without needing to know any code!), by way of editing the default templates for existing controls. This, paired with the ability to access static resources through the VSM, paved way for our next project in creating skins for the Silverlight 2 .NET control set. For this project we were tasked with building specific UI themes for the Silverlight toolkit, which released on CodePlex in December (see Whistler Blue, Bureau Blue & Black).
Having a more stable version of Blend to work with - thanks to SP1, helped immensely but there was still the hurdle of getting designers used to the VSM interface and template structures.Other internal struggles consisted of:
- Maximizing the use of shared static resources without compromising the design or simplifying it to the point of banality.
- Walking the line of VSM animations versus layered assets and how to structure the control templates using the least amount of XAML.
- Cleanup of code added by Blend (collapsing lines where possible and removing unnecessary default properties).
- Managing workflow from design to development for cleanup and consolidation into ISM framework, while maintaining continual design updates.
This was the biggest learning experience of all, because it involved a steady flow from design to development, and there didn’t seem to be an efficient way to handle recurring updates without continually redoing dev work. The most plausible solution would have been for everyone to work from one XAML file containing all controls, merging updates in source control, but having all controls laid out in one file caused a HUGE update lag within Expression Blend’s interface. Even editing XAML directly was experiencing lag, making it impossible to work that way. Instead we had to separate each control to a different project and continually clean and consolidate them with each update for delivery.
Maybe in the near future this problem will have surfaced enough to find a fix, we can only hope! There is definitely one thing we’re looking forward to in 2009 with the release of Silverlight 3 – 3D support and GPU hardware acceleration! Let the games begin!