My Silverlight 3 Wish List

Shout it kick it on DotNetKicks.com

I have been developing full time in Silverlight 2 for a few months now.  I must say, it is the most fun environment I have ever programmed in.  It has been an enabling technology in our product, and I am rather excited to see what comes next.  If the pattern continues as I expect it probably will, we will hear all about the features of Silverlight 3 in a few weeks at Mix 09.  I will not be attending this conference, but I fully expect to be watching the important sessions virtually.  I am hoping for a lot.  You see, as much as I like the SIlverlight framework, it is missing some significant features that I can really use.

So, I figured I would publish my Silverlight 3 wish list.  Some of these things are more important than others, but all of them are things that would make my "Rich Internet Application" more rich. I don’t want this list to sound like I am just a big complainer.  I think I am exercising the framework pretty hard, and Microsoft can only make the framework better with this list. 

MediaElement frame rate control: The Silverlight media element is missing the ability to control the frame rate.  This keeps us from controlling the playback for slow-motion or fast-forward.  I have to imagine that the sports domain wants this as well.

MediaElement loop control: The current media element does not support looping of video content.  It can be programmed by hooking the "MediaEnded" event, putting the position at zero, and playing again, but this causes a noticeable pause.  This pause keeps looping play from being fluid.  It would be nice if the media element supported it directly.

Native video rendering: Silverlight 2 does not use any hardware capabilities for video playback — it is all done in software.  Therefore, the playback takes a lot of processor power.  This is really noticeable when four videos are playing simultaneously.  Any more on modern hardware is often choppy.  I would like to be able to play as many as nine videos at once.

3D support: Similar to the previous wish, Silverlight 2 does not use the video hardware directly.  This means that there is no 3D support.  It would be nice to see some 3D capabilities in Silverlight 3 — preferably handled by hardware.

Direct bitmap manipulation: Silverlight 2 does not support this, and there are certain types of effects and manipulations that are not possible in Silverlight.  I would love to see some bitmap manipulation capabilities

Support for other data transports: Currently, only HTTP requests are made available through the SIlverlight plug-in.  This limits the use of more sophisticated WCF bindings.  At a very minimum, it would be nice to be able to use TCP bindings via WCF.

Better mouse support: Currently, we need to hack in right-click, double-click and scroll-wheel capabilities.  It would be nice to have native support.

Support for drag-and-drop: This is another case where I have hacked something together, but it would be great if I were able to rely on the framework.

Native support for the MVVM pattern: As far as I have figured, the MVVM pattern is the most suitable pattern for most large-scale Silverlight development.  It allows us to test the majority of our code and keep it out of the view.  Unfortunately, I haven’t found MVVM to be well supported in the framework.

  • Commands — They gave us ICommand, but nothing else.  I have hacked something in, but native support would be nice.
  • See what Silverlight.FX and Cliburn have done.  Can we get something like this in the framework?
  • Some sort of "Inversion of Control" or similar decoupling support?  Might MEF or Prism show up in SIlverlight 3?
  • Stand-alone binding — As far as I can tell, binding is only available in controls.  I can’t write tests against controls.  I often want to bind data in my model to my view model.  I have written my own binder for this, but it would be nice to have some built-in support
  • Better property notification.  INotifyPropertyChanged creates a lot of boiler-plate code in the view model.  I have minimized this by using a "property bag", but some utilities that make view models easier to write would be nice.

Interprocess communication: I would like the ability to talk to other non-silverlight processes.  This seems like a tall order, but I have some business cases for this.

That is all I have for now.  I am sure there is more that I am not thinking of.  I come across different needs every day.  For most cases, I have been able to hack some sort of support in when I need it.  In some cases, like the video playback support, I can’t hack my wan out of the limitations. 

This list looks like a lot now that I have written it down.  I am very curious to know if I will be getting any of these features.

Leave a Reply