In our projects, we have views and controls that are in many different assemblies (upwards of 40 assemblies in a single solution with 100s of views). We would like to apply a skin to all views from a single skin assembly that we can swap out with a different skin assembly to apply a different skin (not necessarily at runtime, this could be done at compile time) and only have to change a few lines of code. And here's the kicker... we want it to display properly in the Visual Studio 2008 Designer.
We currently have a runtime solution to skinning that applies the proper skin by merging the main resource dictionary of the skin into the Application.Resources, but the visual studio designer does not show that skin on the views in the dependency assemblies.
We could merge the skin's resource dictionary into each individual view's Window.Resources, but this is a performance hit and requires many changes if we want to swap out the skin.
I've looked at applying styles at the theme level, but to use a style at the theme level you need to specify a ComponentResourceKey with a strongly typed reference to a type in the theme assembly. That requires every single view to specify the namespace where the skin resides and again would be a major refactor to swap out skins.
Other ideas?