1.x:Type
Type类可作为所有数据类型在编程层面上的抽象。在XAML中,如果想表达某个数据类型时就需要使用x:Type标记拓展。例子:
创建一个Button的派生类:


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls;namespace WpfApplication3 {class MyButton:Button{public Type UserWindowType { get; set; }protected override void OnClick()//是protected,不是public {base.OnClick();//激发Click事件Window win = Activator.CreateInstance(this.UserWindowType) as Window;if (win != null){win.ShowDialog();}}} }
添加一个MyWindow:


<Window x:Class="WpfApplication3.MyWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"WindowStartupLocation="CenterScreen"Title="MyWindow" Height="170" Width="200"><Grid><StackPanel Background="LightBlue"><TextBox Margin="5"></TextBox><TextBox Margin="5"></TextBox><TextBox Margin="5"></TextBox><Button Content="OK" Margin="5"></Button></StackPanel></Grid> </Window>
再编写MainWindow:


<Window x:Class="WpfApplication3.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApplication3"WindowStartupLocation="CenterScreen"Title="MainWindow" Height="300" Width="300"><!--xmlns:local="clr-namespace:WpfApplication3"引入命名空间WpfApplication3,并映射为local--><Grid><StackPanel><local:MyButton Content="Show" UserWindowType="{x:Type TypeName=local:MyWindow}" Margin="5"></local:MyButton></StackPanel></Grid> </Window>
2.x:Null
显示地对一个属性赋一个空值
例子:
MainWindow:


<Window x:Class="xNull.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="x:Null Sample" Height="300" Width="300"><Window.Resources><Style x:Key="{x:Type Button}" TargetType="{x:Type Button}"><Setter Property="Width" Value="60"></Setter><Setter Property="Height" Value="36"></Setter><Setter Property="Margin" Value="5"></Setter></Style><!--设置Button控件的默认Style--></Window.Resources><Grid><StackPanel><Button Content="0K"></Button><Button Content="0K"></Button><Button Content="0K"></Button><Button Content="OK" Style="{x:Null}"></Button><!--显示地把Style设置为x:Null了--></StackPanel></Grid> </Window>
效果:
3.标记扩展实例的两种声明语法
上面的例子,可以写成:
<Button Content="OK"><Button.Style><x:Null /></Button.Style> </Button>
这样写,代码显得有些啰嗦,所以为了保持简洁,很少使用这样的写法
4.x:Array
x:Array的作用就是通过它的Items属性向使用者暴露一个类型已知的ArrayList实例,ArrayList内成员的类型由x:Array的Type指明
例子:


<Window x:Class="xArray.MainWindow"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"Title="MainWindow" Height="120" Width="160"><!--需要使用String,引入xmlns:sys="clr-namespace:System;assembly=mscorlib"--><Grid><Grid Background="LightBlue"><ListBox Margin="5" ItemsSource=“{x:Array Type=sys:String}”><!--类型为String--></ListBox></Grid></Grid> </Window>
但如果这样写,是没有数据可以提供的,则改为标签声明语法:


<Window x:Class="xArray.MainWindow"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"Title="MainWindow" Height="120" Width="160"><!--需要使用String,引入xmlns:sys="clr-namespace:System;assembly=mscorlib"--><Grid><Grid Background="LightBlue"><ListBox Margin="5"><ListBox.ItemsSource><x:Array Type="sys:String"><!--类型为String--><sys:String>Tim</sys:String><sys:String>Tom</sys:String><sys:String>Victor</sys:String></x:Array></ListBox.ItemsSource></ListBox></Grid></Grid> </Window>
结果为:
5.x:Static
在XAML文档中使用数据类型的Static成员
例子:
MainWindow.xaml.cs:


using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;namespace xStatic {/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public static string WindowTitle = "高山流水";public static string ShowText { get { return "水落石出"; } }public MainWindow(){InitializeComponent();}} }
MainWindow.xaml


<Window x:Class="xStatic.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:xStatic"Title="{x:Static local:MainWindow.WindowTitle}" Height="120" Width="300"><!--把命名空间xStatic映射为local--><!--使用x:Static访问静态成员数据--><Grid><StackPanel><TextBox FontSize="32" Text="{x:Static local:MainWindow.ShowText}"></TextBox><!--使用x:Static访问静态成员数据--></StackPanel></Grid> </Window>
结果:
6.XAML指令元素
XAML指令元素有两个:
x:Code
x:XData
1)x:Code的作用是,放置一些本应该放在后置代码中的C#代码。一般不会这样做,这样做,会是代码难以维护、不易于调试
2)x:XData是一个专用标签。如果想在XAML中声明一个带有数据的XmlDataProvider实例,那么XmlDataProvider实例的数据就应该放在x:Data标签的内容里,比如:
<Window.Resources><XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books"><x:XData><Supermarket xmlns=""><Fruits><Fruit Name="Peach"/><Fruit Name="Banana"/><Fruit Name="Orange"/></Fruits><Drinks><Drink Name="Coca Cola"/><Drink Name="PEPSI Cola"/></Drinks></Supermarket> </x:XData></XmlDataProvider> </Window.Resources>