Page view counter
Silverlight 2 Post Beta2 Gotcha - ContentPresenter
Last post 09-28-2008 5:51 PM by zbychuk. 2 replies.
Sort Posts:
09-26-2008 3:05 AM
Lightning [li]Silverlight 2 Post Beta2 Gotcha - ContentPresenter

I posted this to my blog, but I also wanted to provide this information on these forums.

As I'm sure you already know, a Release Candidate for Silverlight 2 was published.  ScottGu does an amazing job of covering a lot of information in his blog posts, and others like Mike Snow have also provided some excellent detail.  As they repeatedly told you, go check out the breaking changes document that lists all breaking changes from Beta2 to this release candidate.

If you have a Silverlight application that runs against Beta2, please take immediate action to get it moved (in a test environment) to the RC bits.  There were a bunch of breaking changes (all for the better) and some of them might adversely affect your applications.  Since there isn't a release date for Silverlight 2 yet, I would recommend working quickly to make sure you are ready whenever it is released.  It's impossible to estimate how long it will take to complete the migration, so if you put it off, you might find yourself with a broken application once the final release is put out.

With all of that said, there is one gotcha that I want to highlight for you tonight.  This one caused some trouble for me when porting an application from Beta 2 to the newer bits.  I'm talking about the base class change to ContentPresenter.  In Beta2, ContentPresenter derived from Control; in the new bits, it derives from FrameworkElement.  This might not sound impactful, but it really is.  For starters, here's the list of properties that are now removed from ContentPresenter because of this change:

  • Background
  • BorderBrush
  • BorderThickness
  • DefaultStyleKey
  • FontFamily
  • FontSize
  • FontStretch
  • FontStyle
  • FontWeight
  • Foreground
  • HorizontalContentAlignment
  • IsEnabled
  • IsTabStop
  • Padding
  • TabIndex
  • TabNavigation
  • Template
  • VerticalContentAlignment

That's a pretty long list!  And to make matters worse, I think that every single ContentPresenter I encountered in the app I ported was using at least half of these properties.  That meant that the XAML had to be updated so that these properties were set on a container control that included the ContentPresenter.  In some cases, that was straight-forward, but in others, it wasn't as simple.

Now, for the real kick in the pants... If you have some of these properties set on a ContentPresenter, within your XAML, your application will build just fine.  It might even run and begin to function.  But eventually, the parser will try to load this portion of the XAML and it will barf.  You will get really bizarre errors like this: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)).  The stack trace will look very scary and it will point you nowhere near your ContentPresenter.

In my experience, this caused some major headaches.  Sometimes the app would run, sometimes it wouldn't.  Sometimes all screens would work, sometimes they wouldn't.  When it did crash, it would crash with a different stack trace each time it seemed.  The common thread was the catastrophic failure E_UNEXPECTED, even though the rest of the stack trace would vary widely.

Since examining the stack traces eventually proved to be a fruitless effort, I started removing XAML one block at a time from all content in the application.  Ultimately, I found that one of the XAML files had some errors in it when opened in VS.  When I had the file open, I could see that there were errors reported about the bad properties on the ContentPresenter.  Once I got rid of all of the obsolete properties from all of the ContentPresenter controls in the entire app, it ran smoothly.  I then just had to restyle some things to restore the desired presentation.

So, if you have a Silverlight Beta2 application that you are porting to the RC (or final) build, beware of your ContentPresenter controls.  If you get strange and sporadic errors from anywhere in your application, don't assume the problems are near where the failure was.  Just open all of your XAML files in the editor and look for errors on your ContentPresenters.  Once you get rid of the obsolete properties, you will be in much better shape.

Now, go update your application to work against the release candidate!

JeffHandley

Loading...
Joined on 02-17-2008
Redmond, WA
Posts 3
09-28-2008 4:34 PM
Marked as Answer
Re: Silverlight 2 Post Beta2 Gotcha - ContentPresenter

Jesse Liberty has posted about this topic too after I requested better explanation of the change.

http://silverlight.net/blogs/jesseliberty/archive/2008/09/28/rc0-amp-contentpresenter.aspx

 

JeffHandley

Loading...
Joined on 02-17-2008
Redmond, WA
Posts 3
09-28-2008 5:51 PM
Re: Silverlight 2 Post Beta2 Gotcha - ContentPresenter

Very unconvincing arguments - what if I want to standarise font accross whole application? Is really forcing users to define font in each use fo the component a good practice? I do not think so!

What if I wish to write RoundButtonWithSansComicOfSize24 ?

 

zbychuk

Loading...
Joined on 06-19-2008
Posts 26
Microsoft Communities