Thanks to everyone who came out to my Silverlight Samurai Skills presentations this morning in Toronto, and to Microsoft Canada for inviting me to present at this event. When the Canadian team does events, they do them really big – and really well!
I hope you found the sessions useful and engaging. They certainly provided a lap around a whole lot of the core features in Silverlight 2. I promised to provide code and links so you can follow-up, get connected with the community, and find out more.
The Code
As promised, click here for all the source code from the presentation, including start, end-of-part-one, and completed versions. Import the .vssettings file into Visual Studio to get the code snippets.
I’ll post the slide decks soon – I’ve been asked to hold off a little bit on those.
The Links
Note – this list is far from exhaustive, it just points to some things I’ve found really helpful.
Silverlight.NET – Get Started section has all the bits you need
Additional Silverlight Controls and Themes
Silverlight Toolkit (Microsoft, MS-PL)
Silverlight Contrib (Third-party, MS-PL)
see also
Blacklight, which comes from the Patient Journey Demonstrator
Layout
Silverlight Layout Fundamentals (DevDave)
VisualStateManager, Parts and State Model
Parts and States Model with VSM (scorbs, 4-part series)
IsolatedStorage
IsolatedStorage quickstart (wildermuth)
Browser DOM Integration
Forward-Back Browser Integration (webjak)
More Links [update 12 Nov]
Qixing and Laurent have also put together a FAQ based on feedback from the Montreal version of Silverlight Samurai Skills.
The P.S.
My consultancy, Carrington Technologies, specializes in Silverlight and WPF consulting and training, and we’re based out of Toronto. If you’re interested in finding out more, please drop me a line via the contact page, or through rob at robburke dot not.
p.p.s. Silverlight Streaming has now been updated to Silverlight 2 RTW, so the Deep Zoom FractLOL should now work. [Updated November 2nd]
final p.s. [update] I am greatly indebted to Microsoft’s Mark Rideout, whose excellent TechEd 2008 session on Silverlight 2 formed the basis for the core demo I used in these sessions. I’ve updated his demo to highlight some of the features added to Silverlight 2 between Beta 2 and RTW (including additions to the IsolatedStorage API, and an allegedly more compliant browser history implementation).
Hey Rob!
Your sessions were probably the best at least in the Web Dev/Windows Dev track. I talked to you during a break but forgot to ask if you knew of the timeline that MSFT might come out with CAB (Prism) for Silverlight.
If you are on friendfeed, I’m at friendfeed.com/kamath.
cheers!
Hi Rakesh — thanks for the kind words — if you want to learn more about the state of Prism and Composite Silverlight, please visit the http://www.codeplex.com/CompositeWPF site on Codeplex.
Thanks Rob. Your sessions were fantastic!
One thing you mentioned briefly related to partitioning the Silverlight application so reduce minimize the payload across the wire by spreading out the download, or simply avoid downloading xaps that the user will not use.
Tim Heuer put together this video describing one method of loading xaps on-demand, but the method you described sounded different. I didn’t follow what you said as it was kind quick – any chance you could desribe what you meant?
http://silverlight.net/learn/learnvideo.aspx?video=65687
Thanks! Again, talks – best ones I saw at the conference!
Dave
Hi Dave — yes, a technique essentially the same as Tim’s is what I referred to as having used in past projects to download assemblies on demand. Using multiple Silverlight Class Library projects, graphic and sound assets which impact load time are added to multiple assemblies as Resources, which are downloaded asynchronously after app start using webClient.OpenReadAsync (with error checking), and then loaded using assemblyPart.Load.
For one app, which required a large number of such assets, I split the app into three parts: a small Core assembly, and two assemblies full of Resources. The Core assembly loads quickly and begins an async load of the first set of assets I need (while presenting a richer ‘loading’ screen). Then, the final, larger assembly, which isn’t required until after a little user interaction, loads in a similar manner, ultimately providing the app with access to the full complement of assets. Of course, you can divide up the assets in whatever manner is most intuitive and helpful for your particular app.
This technique will also work for improving the load time for large applications that are hosted on Silverlight Streaming.
hope this helps
Rob
Great – thanks Rob!
Looks like some careful thought is requried to determine the best way to break up the coponents of the application.
Most of the development that I have done is LOB applications in Asp.Net, using Ajax where appropriate. I find that in LOB applications a grid is used frequently. The assembly for the DataGrid is rather large, and ideally one would want it downloaded only once regardless of the number of xaps using the DataGrid within the application. For these types of applications, it would be ideal if the DataGrid was included in the Silverlight install, thereby keeping te xaps nice and small, as well as eliminating that payload each time a user starts up the application.
It appears that the multiple copies (in the senario where the application has been partitioned, and more than one partition makes use of the DataGrid) can be eliminated by setting their “Copy local” properties to false, and then place those assemblies into a core xap similar to how you described.
Thanks again. Cheers!
Dave