Today I have been working through the Microsoft QuickStarts for Silverlight, which include walkthroughs as well as code source. Here are the high level topics available:
Notes to Building Dynamic User Interfaces with Silverlight:
A. Writing Handlers for Silverlight Input Events [Skipped] — this is covered in most introductory materials. Didn’t see a point in reviewing it.
B. Changing the Appearance of an Existing Control in Silverlight — this is interesting, since it covers both styling an app as well as skinning it with ContentTemplates. ContentTemplates do more than set properties for certain elements in your Silverlight app the way CSS does for HTML elements. They also let you switch out your Silverlight element with a custom element such that, say, everywhere you have specified a button in your app, you now get whatever is created in the button’s ContentTemplate. It works a bit like a global replace. On the other hand, whatever events you have hooked up to your button in order to fulfill business requirements will still work, whatever you do with the ContentTemplate.
This QuickStart is mostly a copy / paste sort of tutorial. That said, there are some errors in it such that, if you follow the instructions to the letter, you will end up with a useless application that hangs.
- In section one of "To create a ControlTemplate for a button," your control template needs to include a TargetType attribute set to Button.
- In section two of "To create a ControlTemplate for a button," name your grid "RootElement" rather than "ELEMENT_Root", as the instructions tell you to do.
- Section two of "To specify the appearance of the control" instructs you to Add the following elements after the closing </Grid.Resources> tag, at the comment "Add the elements that specify appearance here."
- It ought to read Add the following elements after the closing </Grid.Resources> tag, at the comment "Add child FrameworkElement objects here."
C. Creating Custom Controls for Silverlight — an eye opening walkthrough. We create a custom Silverlight control by first creating a standard class that inherits from Control, and a separate XML file with an xaml estension. XML file is aware of the control class, but the control class knows nothing about the XAML file. We reuse some of the ContentTemplate techniques from the previous QuickStart to give form to our Silverlight custom control. Here are some minor issues with the walkthrough:
- Be sure to add the following using declaration to your control class: using System.Windows.Controls.Primitives;
- You need to understand Dependency Properties in order to get the most out of this walkthrough. The article provides a dead link to the MSDN article on Dependency Properties. It should have linked here, instead.
- Dependency Properties are a cool concept. For the most part, they are like property bags, except with special Silverlight hooks. The terminology, however, is either not fully worked out, or just ill-conceived. Here’s a sample definition of a dependency property, from MSDN:
- Dependency property: A property that is backed by a DependencyProperty. (Oh really?)
- The tutorial has you start using a Background attribute in your ContentTemplate without first having you add it to your custom class. You need to add this to your class in order to avoid a runtime exception:
public static readonly DependencyProperty BackgroundProperty =
DependencyProperty.Register("Background", typeof(Brush), typeof(NumericUpDown),
null);public Brush Background
{
get { return (Brush)GetValue(BackgroundProperty); }
set { SetValue(BackgroundProperty, value); }
}
D. Displaying a Splash Screen While Loading a Silverlight-Based Application — this QuickStart seems to work. I actually can’t completely tell what’s happening in the walkthrough, though it seems like it will make a great reference if I ever need to customize a splash screen.
E. Working with Data Collections in Silverlight — this useful QuickStart explains data binding and the DataTemplate. No obvious errors, but a few lacunae.
- Life will go much easier if you name your project Quickstart_Bookstore.
- The ObservableCollection type belongs to the namespace System.Collections.ObjectModel.
From the assertions and discussion on Learning Silverlight: Day Three you could need to do a further posting. There are a few items not addressed from my current checking. I’m plainspoken and honest, that way everybody experiences what I feel.
Agree with the compelling standpoint drafted in Learning Silverlight: Day Three. I was looking at all these comments and detected that many of them are in truth entirely for the hyperlinks. I guessed about hopping over your blog because of it but settled instead to just join in. Keep touching off opinions in other people! I genuinely like the way you have published this.
From the assertions and discussion on Learning Silverlight: Day Three you could need to do a further posting. There are a few items not addressed from my current checking. I’m plainspoken and honest,