Shared Resources XAML Intellisense

[ I'll provide a full solution download to anyone interested ]  

 Our Goals were:

1) Use images in XAML syntax like this:

<Image Name="imageSave" Height="16" Width="16" Source="ui:Images.ico_save_16.png"/>

2) Break on invalid image references at COMPILE - not at runtime.
3) Automatically add new when new images are copied into project.
4) Share resources within solution across projects.
5) Get intellisense for images from different projects in the same solution where possible (currently only in the codebehind - but the xaml editor will eventually provide intellisense here too).
6) VS 2008

 

_________________________________________________________

We created a separate "Resources" class library. In that class library we created an Images folder and under that an "ico" and "png" folders with all our images. Not added to "Resources" or "settings" as these generate only internal strongly typed - you need public.

Step 2:

Inside that class library create a text template - I called it Generator.tt. This text template will scan your directory of files and output something like this (below). We have two sub properties "ico" and "png" for the same resource... but you don't have to have that complexity.

// <auto-generated>

public static class Images
{

public static class ico_user_16
{

public static BitmapFrame png
{
       get { return ResourceLocator.GetImageSource("ico_user_16.png"); }
}

}

//end ico_user_16

#endregion

------------------------------------------

The only really tricky part in creating the tt file was figuring out how to find the current directory to scan the project files...

string icoPath = this.Host.ResolvePath(@"Images\ico");

Now you can add references to that "Resources" class library from any project in your solution and get static resources in your xaml files... and share them across projects. As you add new images to your resource library simply save your Generator.tt file to re-generate your static resources.

Enjoy!!!