Markup Extensions
Type converters and property elements let us initialize most properties to constant values or fixed structures. However, in certain situations we need a little more flexibility. For example, we might want to set a property to be equal to the value of some particular static property, but we don't know at compile time what that value will be, like the properties representing user-configured colors. XAML provides a powerful solution in the form of markup extensions. A markup extension is a class that decides at runtime how to set a property's value.
Markup extension classes derive from MarkupExtension, the nonprivate members of
which are shown in Example A-25. This class
is defined in the System.Windows.Markup namespace.
Example A-25. MarkupExtension class
public abstract class MarkupExtension {
protected MarkupExtension ( ) { }
public abstract object ProvideValue(IServiceProvider serviceProvider);
}Example A-26 shows an example of a markup extension in use.
Example A-26. Using a markup extension
...
<Style TargetType="{x:Type Button}"
>
...The TargetType property of the
Style has a value enclosed in curly
braces. This indicates to the XAML compiler that a markup extension is
being used. The first string inside the curly braces is the name of the
markup extension class, and the remaining contents are passed to the
markup extension during initialization.
We are using x:Type in Example A-26. There is no class called Type in any of the .NET namespaces represented by the XAML ...