Important Note: |
|---|
A
StaticResource must not attempt to make a forward reference to a resource that is defined lexically further within the XAML file. Attempting to do so is not supported, and even if such a reference does not fail, attempting the forward reference will incur a load time performance penalty when the internal hash tables representing a ResourceDictionary are searched. For best results, adjust the composition of your resource dictionaries such that forward references can be avoided. If you cannot avoid a forward reference, use DynamicResource Markup Extension instead.
|
The specified ResourceKey should correspond to an existing resource, identified with an x:Key Attribute at some level in your page, application, the available control themes and external resources, or system resources. The resource lookup occurs in that order. For more information about resource lookup behavior for static and dynamic resources, see Resources Overview.
A resource key can be any string defined in the XamlName Grammar. A resource key can also be other object types, such as a Type. A Type key is fundamental to how controls can be styled by themes, through an implicit style key. For more information, see Control Authoring Overview.
The alternative declarative means of referencing a resource is as a DynamicResource Markup Extension.
Attribute syntax is the most common syntax used with this markup extension. The string token provided after the StaticResource identifier string is assigned as the ResourceKey value of the underlying StaticResourceExtension extension class.
StaticResource can be used in object element syntax. In this case, specifying the value of the ResourceKey property is required.
StaticResource can also be used in a verbose attribute usage that specifies the ResourceKey property as a property=value pair:
|
<object property="{StaticResource ResourceKey=key}" .../>
|
The verbose usage is often useful for extensions that have more than one settable property, or if some properties are optional. Because StaticResource has only one settable property, which is required, this verbose usage is not typical.
In the WPF XAML processor implementation, the handling for this markup extension is defined by the StaticResourceExtension class.
StaticResource is a markup extension. Markup extensions are typically implemented when there is a requirement to escape attribute values to be other than literal values or handler names, and the requirement is more global than just putting type converters on certain types or properties. All markup extensions in XAML use the { and } characters in their attribute syntax, which is the convention by which a XAML processor recognizes that a markup extension must process the attribute. For more information, see Markup Extensions and XAML.