Built-in types for common XAML language primitives
XAML 2009 introduces XAML language-level support for several data types that are frequently used primitives in the common language runtime (CLR) and in other programming languages. XAML 2009 adds support for these primitives: 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
, and x:Array
Previous Techniques for Language Primitives in XAML Markup
In XAML for previous WPF versions, you could reference the CLR language primitives by mapping the assembly and namespace that contained a CLR primitive definition class for the .NET Framework. Most of these are in the mscorlib assembly and System namespace. For example, to use Int32, you could declare the following mapping (with an example usage shown thereafter):
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Application.Resources>
<sys:Int32 x:Key="intMeaning">42</sys:Int32>
</Application.Resources>
</Application>
XAML 2009 Language Primitives
By convention, the language primitives for XAML and all other XAML language elements are shown, including the x:
prefix. This is how XAML language elements are typically used in real-world markup. This convention is followed in the conceptual documentation for XAML in WPF and also in the XAML specification.
x:Object
For CLR backing, the x:Object
primitive corresponds to Object.
This primitive is not typically used in application markup, but might be useful for some scenarios such as checking assignability in a XAML type system.
x:Boolean
For CLR backing, the x:Boolean
primitive corresponds to Boolean.
XAML parses values for x:Boolean
as case insensitive. Note that x:Bool
is not an accepted alternative. For the XAML language specification definition, see [MS-XAML] Sections 7.2.17 and 7.4.11.
x:Char
For CLR backing, the x:Char
primitive corresponds to Char.
String and char types have interaction with the overall encoding of the file at the XML level. For the XAML language specification definition, see [MS-XAML] Sections 7.2.7 and 7.4.1.
x:String
For CLR backing, the x:String
primitive corresponds to String.
String and char types have interaction with the overall encoding of the file at the XML level. For the XAML language specification definition, see [MS-XAML] Sections 7.2.6.
x:Decimal
For CLR backing, the x:Decimal
primitive corresponds to Decimal.
XAML parsing is inherently done under en-US
culture. Under en-US
culture, the correct separator for the components of a decimal is always a period (.
) regardless of culture settings of the development environment, or of the eventual client target where the XAML is loaded at run time.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.14 and 7.4.8.
x:Single
For CLR backing, the x:Single
primitive corresponds to Single.
In addition to the numeric values, text syntax for x:Single
also permits the tokens Infinity
, -Infinity
, and NaN
. These tokens are treated as case sensitive.
x:Single
can support values in scientific notation form, if the first character in text syntax is e
or E
.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.8 and 7.4.2.
x:Double
For CLR backing, the x:Double
primitive corresponds to Double.
In addition to the numeric values, text syntax for x:Double
permits the tokens Infinity
, -Infinity
, and NaN
. These tokens are treated as case sensitive.
x:Double
can support values in scientific notation form. Use the character e
or E
to introduce the exponent portion.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.9 and 7.4.3.
x:Int16
For CLR backing, the x:Int16
primitive corresponds to Int16 and x:Int16
is treated as signed. In XAML, the absence of a plus (+
) sign in text syntax is implied as a positive signed value.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.11 and 7.4.5.
x:Int32
For CLR backing, the x:Int32
primitive corresponds to Int32. x:Int32
is treated as signed. In XAML, the absence of a plus (+
) sign in text syntax is implied as a positive signed value.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.12 and 7.4.6.
x:Int64
For CLR backing, the x:Int64
primitive corresponds to Int64. x:Int64
is treated as signed. In XAML, the absence of a plus (+
) sign in text syntax is implied as a positive signed value.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.13 and 7.4.7.
x:TimeSpan
For CLR backing, the x:TimeSpan
primitive corresponds to TimeSpan.
XAML parsing for time-date format is inherently done under en-US
culture.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.16 and 7.4.10.
x:Uri
For CLR backing, the x:Uri
primitive corresponds to Uri.
Checking for protocols is not part of the XAML definition for x:Uri
.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.15 and 7.4.9.
x:Byte
For CLR backing, the x:Byte
primitive corresponds to Byte. A Byte / x:Byte
is treated as unsigned.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.10 and 7.4.4.
x:Array
For CLR backing, the x:Array
primitive corresponds to Array.
You can define an array in XAML 2006 by using a markup extension syntax; however, the XAML 2009 syntax is a language-defined primitive that does not require accessing a markup extension. For more information about XAML 2006 support, see x:Array Markup Extension.
For the XAML language specification definition, see [MS-XAML] Sections 7.2.18.
WPF Support
In WPF, you can use XAML 2009 features but only for XAML that is not markup-compiled. Markup-compiled XAML for WPF and the BAML form of XAML do not currently support the XAML 2009 keywords and features.
A scenario where you can use XAML 2009 features together with WPF is if you author loose XAML and you then load that XAML into a WPF runtime and object graph with XamlReader.Load. The WPF System.Windows.Markup.XamlReader and its Load can process XAML 2009 language keywords and features into a valid object graph representation.
.NET Desktop feedback