What's new in XAML of .NET 4.0

With .NET 4.0 Microsoft will bring up a improved version of XAML. This arcitle shows you the language enhancements they made.

Easy Object References with {x:Reference}

If you want to create an object reference today you need to do a databinding and declare the source with an ElementName. In XAML 2009 you can use the new {x:Reference} markup extension

代码
<!--  XAML 2006  -->
< Label  Target =" {Binding ElementName=firstName} " > FirstName </ Label >
< TextBox  x:Name ="firstName"   />
 
<!--  XAML 2009  -->
< Label  Target =" {x:Reference firstName} " > FirstName </ Label >
< TextBox  x:Name ="firstName"   />

 

 

Built-in Types

If you want to add objects of simple types like string or double to a resource dictionary today you need to map the needed clr-namespaces to an XML namespaces. In XAML 2009 we a lot of simple types that are included in the XAML language.

<!--  XAML 2006  -->
< sys:String  xmlns:sys ="clr-namespace:System;assembly=mscorlib >Test</sys:String>
 
<!-- XAML 2009 -->
<x:String>Test</x:String>

 

 

The following types are included into the XAML language:

  • <x:Object/>
  • <x:Boolean/>
  • <x:Char/>
  • <x:String/>
  • <x:Decimal/>
  • <x:Single/>
  • <x:Double/>
  • <x:Int16/>
  • <x:Int32/>
  • <x:Int64/>
  • <x:TimeSpan/>
  • <x:Uri/>
  • <x:Byte/>
  • <x:Array/>
  • <x:List/>
  • <x:Dictionary/>

 

Generics in XAML with x:TypeArguments

If you want to use an ObservableCollection<Employee> in XAML you need to create a type that derives fromObservableCollection because you cannot declare it in XAML. With XAML 2009 you can use the x:TypeArgumentsattribute to define the type of a generic type.

代码
<!--  XAML 2006  -->
class EmployeeCollection : ObservableCollection
< Employee >
{
}
 
< l:EmployeeCollection >
    
< l:Employee  FirstName ="John"  Name ="Doe"   />
    
< l:Employee  FirstName ="Tim"  Name ="Smith"   />
</ lEmployeeCollection >
 
<!--  XAML 2009  -->
< ObservableCollection  x:TypeArguments ="Employee" >
    
< l:Employee  FirstName ="John"  Name ="Doe"   />
    
< l:Employee  FirstName ="Tim"  Name ="Smith"   />
</ ObservableCollection / >

 

 

Support for Arbitrary Dictionary Keys

In XAML 2006 all explicit x:Key value were threated as strings. In XAML 2009 you can define any type of key you like by writing the key in ElementSyntax.

代码
<!--  XAML 2006  -->
< StreamGeometry  x:Key ="CheckGeometry" > M 0 0 L 12 8 l 9 12 z </ StreamGeometry >
 
<!--  XAML 2009  -->
< StreamGeometry > M 0 0 L 12 8 l 9 12 z
    
< x:Key >< x:Double > 10.0 </ x:Double ></ x:Key >
</ StreamGeometry >

 

 

Use of Non-Default Constructors with x:Arguments

In XAML 2006 objects must have a public default constructor to use them. In XAML 2009 you can pass constructor arguments by using the x:Arguments syntax.

<!--  XAML 2006  -->
Guid id = Guid.NewGuid();
 
<!--  XAML 2009  -->
< Guid  x:FactoryMethod ="Guid.NewGuid"   />

 

 

 

 

 

 

 

 

你可能感兴趣的:(.net)