How to combine imported and local resources in WPF user control

resources, wpf, xaml

Solution

I figured it out. The solution involves MergedDictionaries, but the specifics must be just right, like this:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ViewResources.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <!-- This works: -->
        <ControlTemplate x:Key="validationTemplate">
            ...
        </ControlTemplate>
        <style x:key="textBoxWithError" TargetType="{x:Type TextBox}">
            ...
        </style>
        ...
    </ResourceDictionary>
</UserControl.Resources>

That is, the local resources must be nested within the ResourceDictionary tag. So the example here is incorrect.

Problem

I'm writing several WPF user controls that need both shared and individual resources. I have figured out the syntax for loading resources from a separate resource file: ``` <UserControl.Resources> <ResourceDictionary Source="ViewResources.xaml" /> </UserControl.Resources> ``` However, when I do this, I cannot also add resources locally, like: ``` <UserControl.Resources> <ResourceDictionary Source="ViewResources.xaml" /> <!-- Doesn't work: --> <ControlTemplate x:Key="validationTemplate"> ... </ControlTemplate> <style x:key="textBoxWithError" TargetType="{x:Type TextBox}"> ... </style> ... </UserControl.Resources> ``` I've had a look at ResourceDictionary.MergedDictionaries, but that only lets me merge more than one external dictionary, not define further resources locally. I must be missing something trivial? It should be mentioned: I'm hosting my user controls in a WinForms project, so putting shared resources in App.xaml is not really an option.

Original source