Archive for the 'Silverlight' Category

Silverlight & Composite Application Guidance (Prism): Spike published

Weeks ago we shipped the Composite Application Guidance for WPF and with the Prism team we started to spike around the migration of the Composite Application Library to Silverlight 2 Beta 2. The good news is that yesterday we published that spike. (A ’spike’ is a small and quickly developed sample application in order to mitigate some risks).

After downloading and decompressing the latest change set of the source control, you will find a new folder named spikes that contains the Composite Application Library migrated to Silverlight. As you may imagine, there were many challenges that we had to address in order to make it “work”  (Rob Eisenberg wrote two articles describing differences between WPF and Silverlight that you might want to check: There’s some darkness in your silver light and Silverlight Problems That Affect Me).

Note: The migration is not complete, we used the spike to have a perspective of the challenges.

 

Modularity

Module loading in Silverlight is very different from WPF, so this was a challenge. We continued spiking on different approaches, but those spikes are not uploaded to Codeplex yet.

Regarding the module enumerators, System.Configuration is not supported by Silverlight current version, so we are using a new XML file module enumerator (not published either).

Regions

In WPF, the RegionManager attached property value gets inherited by the elements in the visual tree. This cannot be done in Silverlight due to the lack of the FrameworkPropertyMetadataOptions.Inherits option. However, we have found a workaround for this issue.

If you want to declare regions in XAML, you have to create an application resource to store the RegionManager instance, so it can be used by the views. This can be done in the Bootstrapper, as shown in the code below:

protected override void ConfigureContainer()
{
   base.ConfigureContainer(); IRegionManager regionManager = Container.Resolve<IRegionManager>();
   Application.Current.Resources.Add(“RegionManager”, regionManager);
}

And the view has to explicitly set the RegionManager attached property to the resource created previously.

<ItemsControl x:Name=”MainRegionControl” cal:RegionManager.RegionName=”MainRegion” cal:RegionManager.RegionManager=”{StaticResource RegionManager}” />

Events

Events has been migrated successfully, however, the unit tests are still a challenge because of the differences in threading between Silverlight and WPF. One difference we found, is that if you are subscribing to an event using weak references, for this reason you can only use public methods as delegates (lambdas, anonymous delegates or private methods won’t work) because of security restrictions enforced by Silverlight.

Commands

As you might know, the support for commands is missing in Silverlight. This is really bad news, considering that big part of our guidance talk about using Commands for communication between the modules and from the view.

I’m not going into deep details on this because Julian Dominguez published a great post explaining how to use commands in Silverlight.

Download

You can get the spike by downloading the latest change set of the CompositeWPF source control.

Notes

  • We didn’t ship the Unity Application Block, so I recommend you to see Michael Sync’s post in order to have Unity working on Silverlight.
  • In order to run the Unit tests, check Jeff Wilcox’post.

Feedback  / Contributions

Feel free to give us your feedback on the discussion board. If you want to contribute with the CompositeWPF project, check the CompositeWPF contrib. community site.

Enjoy!

CompositeWPF (Prism) Contrib Latest Additions

A week ago we shipped the Composite Application Guidance for WPF and many people (including me) started to contribute in the CompositeWPF Contrib community project and to play with the guidance.

Let’s explore the latest additions added to the CompositeWPF Contrib project.

  • CompositeModuleEnumerator. The CompositeModuleEnumerator makes it possible to combine several module enumerator instances into one module enumerator. This makes it easier for developers to for example combine both fixed modules and modules loaded through the ConfigurationModuleEnumerator.
    image
    For more information about the CompositeModuleEnumerator, see Combining module enumerators in CompositeWPF.
  • ToolBarPanelRegionAdapter. This adapter adapts control of type System.Windows.Controls.Primitives.ToolBarPanel and derived classes.
  • Visual Studio Templates. The goal of these templates is to help users start with the Composite WPF project
    For more information about the Visual Studio Templates, see Composite Application Guidance for WPF Visual Studio Templates.

I’ve been also reorganizing the folder structure of the project, so if you download the latest change set you will find the following structure:

image

If you want to contribute to the project, please follow the Sign Up Process.

Enjoy!

How-to: Fix the ‘The “ValidateXAML” task failed unexpectedly’ error after installing Microsoft Silverlight Tools Beta 2

Last week I’ve installed Microsoft Silverlight Tools 2 Beta 2 on my laptop to start developing applications for Silverlight 2 Beta 2.

Once the installation finish, I created a Silverlight Application just to see if everything works as expected. The application was successfully created but when I tried to build and run the solution, I faced with the following error:

image

After spend some time searching for some clues, I found the following solution:

  1. Open the Visual Studio 2008 Command Prompt.
  2. Execute devenv /ResetSkipPkgs in the command prompt.
    This switch clears all options to skip loading added to VSPackages by users wishing to avoid loading problem VSPackages. This switch also starts Visual Studio.
  3. Close Visual Studio and then execute devenv /Setup in the command prompt.
    This switch forces Visual Studio to merge the resource metadata that describes menus, toolbars, and command groups from all VSPackages available
  4. Open Visual Studio and have fun.

For more information about the Devenv Command Line Switches, see Devenv Command Line Switches on MSDN.

Hope this helps.

Silverlight: Where to start?

logo_main_sl

Microsoft Silverlight is a cross-browser, cross-platform plug-in for delivering the

next generation of .NET based media experiences and rich interactive applications (RIAs) for the Web. Silverlight offers a flexible and consistent programming model that supports AJAX, Python, Ruby, and .NET languages such as VB and C#, and integrates with existing Web applications. Silverlight media capabilities include fast, cost-effective delivery of high-quality audio and video to all major browsers including Firefox, Safari and Internet Explorer running on the Mac or on Windows. By using Expression Studio and Visual Studio, designers and developers can collaborate more effectively using the skills they have today to create Silverlight web experience.


Downloads

Articles & Blog Posts

Main Sites

Learn

Screencasts

Resources & other stuff

Books

Blogs