Archive for April, 2010

Updated Code Snippets for WPF and Silverlight

Friday, April 30th, 2010

I originally posted my Visual Studio WPF code snippets back in November of 2007. At that time, I was actually on the road delivering training for Silverlight 1.0. My co-instructor observed me using the snippets and suggested that I make them publicly available. It turned out to be a good suggestion, as I’ve received great feedback on the snippets over the last few years. Hopefully they’ve helped a few of you gain some productivity too. ūüôā

We’ve definitely come a long ways since the days of SL 1.0 and javascript! My snippets have evolved over the years to better meet the needs of both WPF and Silverlight. An update is long overdue, so I’ve now posted the latest version of my snippets online…


Download the Snippets Here


Pick Your Language

As before, the installer package contains both C# and VB versions of each snippet. If you double click the .vsi file, you can choose exactly which snippets to install.

For those of you working in C#, you only have to remember a handful of shortcuts to access any of the 86 unique snippets:

  • dp (for dependency properties)
  • inpc (for an implementation of INotifyPropertyChanged)
  • op (for observable properties)
  • rc (for routed commands)
  • re (for routed events)

For those of you who work in VB, well… you have my sympathies! Just kidding. ūüėČ I would suggest using the snippet picker until you learn the shortcuts for the particular snippets that you find most helpful.

Pick Your Framework

Although my (self-endowed) doctoral degree is in WPF, I also spend a good amount of time writing Silverlight code. This latest snippet package brings my Silverlight snippets in line with my WPF snippets. For example, all 6 variations of dependency property declarations are now fully supported for SL 3 and SL 4. In C#, you can quickly access the dependency property snippets for Silverlight by typing ‘dp’, hitting Tab twice, and then typing ‘s’. You should see something like the following:

Silverlight Snippets

In addition to declaring DPs, I also use the ‘inpc’ and ‘op’ snippets quite heavily in Silverlight.

The ‘rc’ and ‘re’ (routed commands and routed events) snippets are mostly for WPF. However, the ‘re c’ snippets are very useful for declaring custom event args even in Silverlight. Just remember to hit delete when you tab to the “Routed” field in the snippet. There is also an ‘re s’ snippet that I use in Silverlight when I need to provide a property changed event. Note that the event it provides is not truly routed, as SL does not allow you to insert custom events into its routed pipeline. Still, it is often the appropriate choice when you want to create cross-framework code.

What changed?

Aside from the addition of about 20 new snippets, there were also a few improvements to the older snippets.  If you are using an earlier release, you may notice a few of these changes.  Probably the biggest difference is in the following method signature (found in many DP snippets):

Old Snippet

/// <summary>
/// Provides derived classes an opportunity to handle changes
/// to the Whatever property.
/// </summary>
protected virtual void OnWhateverChanged(DependencyPropertyChangedEventArgs e)

New and Improved Snippet

/// <summary>
/// Provides derived classes an opportunity to handle changes 
/// to the Whatever property.
/// </summary>
protected virtual void OnWhateverChanged(double oldValue, double newValue)

Without going into the mundane details, I’ll just say that the motivation for changing this signature on the WPF snippets¬†was mostly code portability between WPF and Silverlight.¬† The former signature did not always work well because Silverlight does not provide a public constructor for DependencyPropertyChangedEventArgs.¬† This became problematic in coercion scenarios.¬† I also prefer the latter version because it provides a type-specific¬†OnChanged callback, but that’s just a personal preference.

Are the old snippets still available?

For the luddites who are not ready for these modernized snippets, you can still download the older snippets here. ūüėČ

For everyone else, I hope you like the new snippets!¬† There are a few gems in there which I’ll expound upon further¬†in future posts.

Time to Update Your Theme Files

Tuesday, April 13th, 2010

In ‘L’ is for Lookless, I introduce WPF’s lookless control model and examine what it means to style and template a control in WPF.¬† I also talk about the importance of¬† keeping the default Windows theme files on hand as a general reference for control styling and templating.

Now that WPF 4 has officially released (as part of Microsoft .NET Framework 4.0), it is a good time to update your WPF theme files.

The latest theme files can be downloaded here.

Not a lot has changed in the templates of the existing controls… mostly just fixes (e.g., dynamic bindings to system colors for border strokes).

The real benefit to the new theme files is that the updated styles demonstrate how to enable some of the new WPF 4 features (like ClearType text rendering and ScrollViewer panning in response to touch input).

There are also a few new controls (DatePicker, DataGrid, etc) that have officially moved out of the WPF Toolkit on CodePlex and into the framework.  The updated theme files provide a good reference for styling and templating these new controls.