Saturday, 4 May 2013

Markup Extension in WPF

Download Code – Sample containing all Markup Extensions

Markup Extension is very useful and handy feature in XAML.

Instead of directly specifying string values for properties in XAML, Markup extension can be used to provide values to properties that can be retrieved from different sources.

Let’s take a simple example of setting Background color of TextBlock.

Directly specify string value for Background property

<TextBlock Background="LightBlue"></TextBlock>

Using Markup Extension

We will use StaticResource Markup Extension to set Background property value. StaticResource means referring to a resource defined in XAML. So we define a resource for LightBlue color.

<SolidColorBrush x:Key="LightBlueColor" Color="LightBlue"></SolidColorBrush>

Now, Markup Extension can be set using Attribute syntax or Property Element Syntax.

Attribute syntax: This syntax is used in most of the cases when using Markup Extension. Syntax uses opening and closing curly braces ( { } ). Type of Markup Extension to be used is identified through string immediately after opening curly braces.

<TextBlock Background="{StaticResource ResourceKey=LightBlueColor}"></TextBlock>

Here, StaticResource string after opening curly braces indicates XAML parser to use StaticResource Markup Extension. StaticResource has a ResourceKey property which should be set to the key value of resource to be used. StaticResource extension would internally use this ResourceKey to lookup and return the resource.

Property Element syntax: Syntax is similar to using any other element using angle brackets ( <> )

<StaticResource ResourceKey="LightBlueColor"></StaticResource>

You might not get StaticResource in intellisense when using property Element syntax but it compiles and works fine.

Markup Extension is simple and easy to use but adds lots of power and flexibility to programming language. Once you start exploring different built-in Markup Extension provided in WPF you will start realizing that.

Types of Markup Extension

WPF provides several built-in Markup extensions which can be broadly classified into 2 categories.

XAML Defined - Markup Extension that are defined as an intrinsic feature of XAML as a language. Note: XAML language is also used for creating UI in other platforms like Silverlight, Windows Phone, Windows 8 etc. These extension are present in XAML namespace and accessed using default “x:” prefix.

WPF Specific - Markup Extension that are specific to WPF.

Below chart provides a quick overview of different Markup Extensions and their short description.

WPF MarkupExtension

I have added all Markup Extensions in sample attached at the top of this post. I have also posted code snippets in separate post here.

Here is a nice MSDN link which has links to different Markup Extension.

In next post, we will look at creating custom Markup Extension.

No comments:

Post a Comment