XAML 2009 Features: Named Object References
This is part of a series on New WPF\XAML Features
In previous releases, if you needed to reference a named object, your XAML would look something like
<Label Target='{Binding ElementName=firstNameBox}' >_Target</Label>
<TextBox Name='firstNameBox'>Uses Binding</TextBox>
In the current release (.NET 4), we introduced a built in markup extension x:Reference. This would enable referencing a named object. The above XAML can now be written as
<Label Target= '{x:Reference secondNameBox}'>_Second Target</Label>
Or
<Label Target= 'thirdNameBox' >_Third Target</Label>
The references look both forward as well as backwards
Another possibility working with named objects is to create a markupextension that calls into IXamlNameResolver to resolve a name. One scenario is having method calls in XAML like the below. We covered this is a previous post written by Shree.
<School Topper="{Call students.GetTopper}" >
<School.Class>
<Students x:Name="students">
<Student Name="Audrey" Marks="90" />
<Student Name="Bill" Marks="95" />
</Students>
</School.Class>
<!-- This is backward reference -->
<!--<School.Topper>
<Call Expression="students.GetTopper" />
</School.Topper>-->
</School>
A simple project showing the usage of x:Reference is attached
**
Note that XAML 2009 features work only for loose XAML in WPF.