How to load a ResourceDictionary at Design Time in WPF
I am including my ResourceDictionary files as Content files. Content files means they are not compiled or embedded, but they are loose files on disk.
One issue I need to solve was how to have the Design View in Expression Blend or Visual Studio.
It seems that Expression Blend has a partial solution but it doesn’t work in Visual Studio for me.
Steps for loading a ResourceDictionary from a loose file at design time
- Locate your .proj file for your WPF Project.
- Edit the .proj file with you favorite text editor.
Note: I use Notepad++. - Find the ResourceDictionary file that is included as content.
<Content Include="Resources\en-US\Common.View.LocalizationResources.en-US.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - Change it to this:
<Content Include="Resources\en-US\Common.View.LocalizationResources.en-US.xaml" Condition="'$(DesignTime)'=='true' OR ('$(SolutionPath)'!='' AND Exists('$(SolutionPath)') AND '$(BuildingInsideVisualStudio)'!='true' AND '$(BuildingInsideExpressionBlend)'!='true')"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> - Save and close the file.
Loading multiple ResourceDictionary files at design time
Sometimes Expression Blend will prompt you when it can’t find a resource and it will do this for you. However, it does something interesting.
It adds a file called DesignTimeResources.xaml in the Properties folder as a Page (not as Content).
<Page Include="Properties\DesignTimeResources.xaml"
Condition="'$(DesignTime)'=='true'
OR ('$(SolutionPath)'!=''
AND Exists('$(SolutionPath)') AND '$(BuildingInsideVisualStudio)'!='true'
AND '$(BuildingInsideExpressionBlend)'!='true')">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
<ContainsDesignTimeResources>true</ContainsDesignTimeResources>
</Page>
The file then looks as follows:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="E:\Dev\LD\Trunk\install\Common\LANDesk.Install.Common\Resources\en-US\Common.LocalizationResources.en-US.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Resource dictionary entries should be defined here. -->
</ResourceDictionary>
And then you can add more ResourceDictionaries without modifying the .proj file.
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="E:\Dev\LD\Trunk\install\SomeApp\Branding\StyleResources.xaml"/>
<ResourceDictionary Source="E:\Dev\LD\Trunk\install\SomeApp\Branding\AlternateStyleResources.xaml"/>
<ResourceDictionary Source="E:\Dev\LD\Trunk\install\SomeApp\Resources\en-US\en-US.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Resource dictionary entries should be defined here. -->
</ResourceDictionary>
ResourceDictionary with Relative Paths
Of course relative paths are more desired than static paths, especially when using projects among multiple people and from source control.
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\Branding\StyleResources.xaml"/>
<ResourceDictionary Source="..\Branding\AlternateStyleResources.xaml"/>
<ResourceDictionary Source="..\Resources\en-US\en-US.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Resource dictionary entries should be defined here. -->
</ResourceDictionary>
Resources:
http://www.tweened.org/en/2010/06/07/design-time-resources-dans-blend-4/

Hi,
Were you able to get design-time data to load in Visual Studio? I’ve tried your method and nothing shows up 🙁
Thanks,
-Frank
No, it seems to only work in Expression Blend. I researched for a while and read at least one MS site that claimed it should work in VS, too, but I have never been able to get it to work…I haven’t checked VS 2012.
However, in Expression Blend, I got relative paths to work. You need to use “../”.