CustomXamlResourceLoader Class


Enables loading of custom resource dictionaries as sources. Override GetResource to provide the logic that a XAML parser can use to look up the necessary resources at load time.

/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class CustomXamlResourceLoader
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
public class CustomXamlResourceLoader
Public Class CustomXamlResourceLoader
Object IInspectable CustomXamlResourceLoader

Windows requirements

Device family
Windows 10 (introduced in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (introduced in v1.0)


CustomXamlResourceLoader supports a markup extension usage {CustomResource}. This markup extension is unique to the Windows Runtime XAML framework (it did not exist in precursor XAML technologies such as Windows Presentation Foundation (WPF) and Microsoft Silverlight.)

A {CustomResource} usage doesn't work by default (the base implementation of GetResource is incomplete). To make a valid {CustomResource} reference, you must perform each of these steps:

  1. Derive a custom class from CustomXamlResourceLoader and override GetResource method. Do not call base in the implementation.
  2. Set CustomXamlResourceLoader.Current to reference your class in initialization logic. This must happen before any page-level XAML that includes the {CustomResource} extension usage is loaded. One place to set CustomXamlResourceLoader.Current is in the Application subclass constructor that's generated for you in the App.xaml code-behind templates.
  3. Now you can use {CustomResource} extensions in the XAML that your app loads as pages, or from within XAML resource dictionaries.

{CustomResource} markup extension can be used from XAML in a similar way to {StaticResource} markup extension, which performs built-in resource lookup from various ResourceDictionary locations. The difference is that the app itself implements the resource lookup logic for a {CustomResource} markup extension usage by supplying a custom resource loader. To implement the custom resource loader, the application must provide a class that derives from CustomXamlResourceLoader and override the GetResource method. The app must register its custom resource loader by setting the static property CustomXamlResourceLoader.Current to an instance of its custom resource loader class. This registration must be done on a XAML UI thread before any parsing of XAML that uses {CustomResource} markup extension. If the application uses multiple UI threads, a separate registration must be done on each.

The way in which the CustomXamlResourceLoader stores its resources is probably not related to ResourceDictionary at all. Typically, in addition to the required overrides, your CustomXamlResourceLoader class would provide internal or public methods that enable storing, keying and otherwise working with the resource items in an underlying collection.



Initializes a new instance of the CustomXamlResourceLoader class.



Returns the active CustomXamlResourceLoader instance.


GetResource(String, String, String, String)

When overridden in a derived class, specifies the logic of resource lookup for this CustomXamlResourceLoader. Given a resource ID and some type information about the expected result, returns the requested resource.

Applies to

See also