Search code examples
wpfvisual-studio-2008xamlskinningpack-uri

Avoiding Visual Studio designer errors when WPF resource is defined in separate project


How can I avoid Visual Studio designer errors when a WPF resource is defined in separate project?

I have three projects in a composite WPF application: the main application, an "infrastructure" library, and a "module" library. The main application references the other projects via their output DLLs (the projects are not located in a single solution together).

I am defining a skin (some brushes and styles in a ResourceDictionary) in the "infrastructure" library. I would like the main application to select a skin and make it available to the entire application (via MergedDictionaries in App.xaml).

In my module I want to use the resources defined in the skin that the main application loads. If I reference the resource as if it were locally available like this:

Background={StaticResource MainBackgroundBrush}

almost everything works as desired. The exception is that Visual Studio's designer gets confused and tells me that "StaticResource reference 'MainBackgroundBrush' was not found". This effectively prevents me from using the designer.

What can I do to define a "skin" ResourceDictionary in a project, reference that skin in the main application, and then use its resources in a module project?


Solution

  • One possible solution is to use DynamicResource rather than StaticResource. The Visual Studio 2008 designer simply displays the controls without any styling, like VS2010 beta 1 does when it cannot resolve a StaticResource.

    Using DynamicResource is appropriate in situations where a particular style may change at runtime, like when skinning.

    I found some related questions supporting this:

    I also found someone who states that DynamicResource should be used whenever a resource is not local: