平平淡淡开开心心  
微信小程序全栈交流群 全球旅游旅行交流群

本篇从如下两个方面学习WPF XAML:

1、基本概念

2、基本语法

一、基本概念

1、XAML是派生自XML的可扩展应用程序标记语言(Extensible Application Markup Language)。微软创造。应用在WPF,WF,Silverlight,Metro App等开发技术中。

2、在WPF中,XAML用来开发用户界面。继承了XML的Tag,Attribute等语法。另有一些语法上的创新。

3、在WPF中,XAML运行在CLR之上,但它不编译为IL,而是编译为BAML代码,在运行时会被解析成CLR类型(Types)。

4、WPF中XAML是大小写敏感的。

二、基本语法

1、Tag语法=对象元素(Object Elements)

  每个标签即是一个对象元素,将被解析为一个WPF Framework(主要来自PresentationFramework.dll)中的类的实例。下面的代码就是一个对象元素,运行时会被解析为一个Button对象实例。

<Button></Button>

或写成

<Button />

2、Attribute赋值语法

2.1 普通字符串赋值。下面代码给Button的Property和Event赋值。字符串将被通过包装好的TypeConverter来转换成对象。TypeConverter使用C#的Attribute技术来实现的。

<Button Content="aaa" Click="Button_Click" />

2.2 标记扩展赋值。用花括号这种方式赋值就叫标记扩展赋值。常用的地方是在用到绑定和资源的时候。

<Button Command="{Binding Copy}" />

2.3 属性元素赋值。有的时候简单字符串赋值不了的,就用属性元素赋值。

<Button>
    <Button.Content>aaa</Button.Content>                
</Button>

2.4 内容赋值。控件要有Content这个属性,也就是要继承自ContentControl这个类,才能这么赋值。夹在标签中间。

<Button>aaa</Button>

2.5 集合赋值。下面例子是给StackPanel.Children这个属性赋值一个集合,被省略了。这个属性的类型是UIElementCollection。在这个例子,我们也看到WPF支持一些省略的写法,在实际开发中运用,可以使XAML代码更简洁。

<StackPanel>
    <Button>a</Button>
    <Button>b</Button>
</StackPanel>

3、命名空间。

一般用在Root元素上(Application,Window,UserControl,Page,ResourceDictionary等)。如下例子,xmlns为引入命名空间的attribute。第一行xmlns是没有指定别名的,是默认命名空间,它指定的命名空间包含了微软提供所有的XAML控件的程序集。第二行xmlns别名是x,也是微软提供的命名空间,这里面主要包含了一些关于解析Xaml语言的程序集。第三行xmlns是自己引入的,开发人员自己写的控件等,可以通过命名空间这种方式引用到XAML文档来使用。

<Window x:Class="WpfFirst.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:System;assembly=System"
        Title="MainWindow" Height="350" Width="525">    
</Window>

4、附加属性,附加事件。

下面例子,Panel.ZIndex就是附加属性,而附加事件是界面上用不了的。具体在写属性和事件时候讨论。

<StackPanel>
  <Button Panel.ZIndex="1">a</Button>
  <Button Panel.ZIndex="2">b</Button>
</StackPanel>

5、树。

XAML文档是树状结构的。在WPF中,有逻辑树(Logical Tree)和可视树(Visual Tree)的概念,在运行时会维护这两棵树。逻辑树是以我们看到的控件为节点的,这些控件一般继承与FrameworkElement or FrameworkContentElement,而可视树能看到控件内部的元素,这些元素一般继承自Visual类。WPF提供了两个辅助类(LogicalTreeHelper and VisualTreeHelper)来操作这两棵树。

posted on 2012-11-26 14:00  程序媛鼓励师  阅读(4908)  评论(2编辑  收藏  举报