I posted a question a few months ago about sharing resource dictionaries across assemblies. It turns out you can do that using the Component Resource Key markup extension. A
Cameron MacFarland's answer was spot on. I have now tested it, and it works.
Here is the solution: Add the DLL refs and the Themes/generic.xaml file to the plain Class Library project. Then, open AssemblyInfo.cs and add the following code at the end of the file:
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
Recompile, and the Component Resource Key markup extension should work.