Andrew Stephens
Andrew Stephens

Reputation: 10203

WPF - using styles/resources from another assembly

I'm new to WPF and struggling to use styles that live in a separate assembly. This is what I'm doing:-

I have a class library project with a \Themes folder containing a "generic.xaml" that merges a number of xaml files from a subfolder within \Themes:-

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Metro\CoreStyles.xaml" />
        ... etc ...
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

My solution also has a WPF application project, and in here the App.xaml merges in the resources from my library project like so:-

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MyThemeLibrary;component/Themes/generic.xaml"/>    
        ... etc...            

Standard stuff so far.

Finally, I have a third project - a WPF user control library. These controls use these common styles, typically with "Style={StaticResource SomeStyle}". I can run the app and it all looks fine, but the problem is I don't get design-time support when writing the user controls - the design surface is basically empty.

Another SO article suggested adding an App.xaml to the user control library project, and merging in the resources as above. This works and I get my design-time support, however I get an error when trying to build the solution:

Library project file cannot specify ApplicationDefinition element.  

I have tried changing the App.xaml build action from "ApplicationDefinition" to "Page", as has been suggested elsewhere. This gets the build working but I lose the design-time support as the user controls can no longer see the styles.

Is there a way around this problem, or failing this, an alternative way of using styles from another assembly?

Thanks in advance

Andrew

Upvotes: 4

Views: 1634

Answers (1)

gaurawerma
gaurawerma

Reputation: 1826

The error message says it. You cannot use "pack://application..." syntax in a library project. You should do this in your wpf project.

Upvotes: 0

Related Questions