WindowsPhone XAML语法详解
程序员文章站
2022-04-06 23:30:40
XAML 是一种声明性标记语言。XAML 简化了为.NET Framework 应用程序创建UI 的过程。您可以在声明性XAML 标记中创建可见的UI 元素,然后使用代码隐藏文件(...
XAML 是一种声明性标记语言。XAML 简化了为.NET Framework 应用程序创建UI 的过程。您可以在声明性XAML 标记中创建可见的UI 元素,然后使用代码隐藏文件(通过分部类定义与标记相连接)将UI 定义与运行时逻辑相分离。XAML 直接以程序集中定义的一组特定后备类型表示对象的实例化。XAML 实现了一个工作流,通过此工作流,各方可以采用不同的工具来处理应用程序的UI 和逻辑。
以文本表示时,XAML 文件是通常具有.xaml 扩展名的XML 文件。 可通过任何XML 编码对文件进行编码,但通常编码为UTF-8。
特点:
1. 具有.xaml 扩展名的XML 文件,格式和XML一样
2. 在XAML中定义的元素其实是程序集中定义的类型对象
3. 每一个WP7应用程序中的.xaml文件,都有一个与之对应的代码隐藏文件(XAML文件名+.cs)
XAML文件与代码隐藏文件
由于XAML文件只负责用于表现UI,而UI对应的控制逻辑通常是由与之对应的代码隐藏文件来负责的。在WP7应用程序中,每一个WP7应用程序中的.xaml文件,都有一个与之对应的代码隐藏文件(XAML文件名+.cs),例如:MainPage.xaml对应的代码隐藏文件名字为MainPage.xaml.cs。二者通过XAML文件根元素中x:Class前缀进行连接指定。当UI上的控件产生了事件之后,会通过x:Class前缀中指定的代码隐藏文件命名空间和类名,找到UI处理逻辑,从而进行事件处理(那当然,还要在控件的事件属性中指定事件处理方法例如下面代码:
在根元素x:Class中指定了命名空间和类名为MyTes.MainPage,在Button元素中指定了按钮处理方法Btn_Click,当用户按下按钮时,自动回调代码隐藏文件MainPage.xaml.cs中的Btn_Click事件处理方法。
MainPage.xaml文件
[html] view plaincopy
<phone:PhoneApplicationPage
x:Class="MyTest.MainPage"
...>
<Button Click="Btn_Click" />
</phone:PhoneApplicationPage>
MainPage.xaml.cs代码隐藏文件
[csharp] view plaincopy
namespace MyTest
{
public partial class MainPage : PhoneApplicationPage
{
private void Btn_Click (object sender, RoutedEventArgs e)
{
....
}
}
属性语法
对象的属性通常可表示为对象元素的特性。属性语法命名在属性语法中设置的属性,后跟赋值运算符(=)。属性的值始终以包含在引号中的字符串的形式进行指定。
属性语法是最简单有效的属性设置语法,并且对于曾使用过标记语言的开发人员而言在使用中是最直观的语法。例如,以下标记将创建一个具有红色文本和蓝色背景的按钮,还将创建指定为Content 的显示文本。
[html] view plaincopy
<Button Background="Blue" Foreground="Red" Content="This is a button"/>
属性对象元素语法
对于对象元素的某些属性,属性语法是不可能实现的,因为无法在属性语法的引号和字符串限制内充分地表达提供属性值所必需的对象或信息。对于这些情况,可以使用另一个语法,即属性对象元素语法。
属性元素对象开始标记的语法为<类型名称.属性名称>。 通常,该标记的内容是类型的一个对象元素,属性会将该元素作为其值。指定内容之后,必须用一个结束标记结束属性元素。结束标记的语法为</类型名称.属性名称>。
[html] view plaincopy
<Button>
<Button.Background>
<SolidColorBrush Color="Blue"/>
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="Red"/>
</Button.Foreground>
<Button.Content>
This is a button
</Button.Content>
</Button>
内容属性
如果一个类的内容属性为该类中的唯一一个内容属性,对象元素的子元素可以用于设置该内容属性的值。换言之,仅对内容属性而言,您可以在XAML 标记中设置该属性时省略属性元素,并在标记中生成更直观的父级/子级形式。
[html] view plaincopy
<Border>
<TextBox Width="300"/>
</Border>
当然,你也可以显示的的标明,设置了元素的内容属性为子元素。
[html] view plaincopy
<Border>
<Border.Child>
<TextBox Width="300"/>
</Border.Child>
</Border>
集合语法
XAML 语言包含一些优化,可以生成可读性更好的标记。其中的一项优化是:如果某个特定属性采用集合类型,则您在标记中声明为该属性的值内的子元素的项将成为集合的一部分。在这种情况下,子对象元素的集合是设置为集合属性的值。
下面的示例演示为GradientStops 属性设置值的集合语法:
[html] view plaincopy
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
XAML 根元素和XAML 命名空间
这些特性向XAML 处理器指明哪些XAML 命名空间包含标记将要作为元素引用的后备类型的类型定义。xmlns 特性明确指示默认的XAML 命名空间。 在默认的XAML 命名空间中,可以不使用前缀指定标记中的对象元素。对于大多数WP7应用程序方案中,默认的XAML 命名空间均映射到为WPF 命名空间http://schemas.microsoft.com/winfx/2006/xaml/presentation。xmlns:x 特性指示另外一个XAML 命名空间,该命名空间映射XAML 语言命名空间http://schemas.microsoft.com/winfx/2006/xaml。
使用xmlns 定义用法范围和名称范围映射的做法符合XML 1.0 规范。XAML 名称范围与XML 名称范围的不同仅在于:XAML 名称范围还包含有关进行类型解析和分析XAML 时名称范围的元素如何受类型支持的信息。
请注意,只有在每个XAML 文件的根元素上,xmlns 特性才是绝对必需的。xmlns 定义将适用于根元素的所有子代元素(此行为也符合xmlns 的XML 1.0 规范。)同时允许根以下的其他元素上具有xmlns 特性,这些特性将适用于定义元素的任何子代元素。 但是,频繁定义或重新定义XAML 命名空间可能会导致XAML 标记样式难以阅读。
其XAML 处理器的实现包括可识别核心程序集的基础结构。因此,为了引用来自WP7程序集中的XAML 元素,只需将默认XAML 命名空间声明为默认 xmlns。
x: 前缀
在上面的根元素示例中,前缀x: 用于映射XAML 命名空间http://schemas.microsoft.com/winfx/2006/xaml,该命名空间是支持XAML 语言构造的专用XAML 命名空间。 在这整个SDK 的项目模板、示例以及文档中,此x: 前缀用于映射该XAML 命名空间。XAML 语言的XAML 命名空间包含多个将在XAML 中频繁用到的编程构造。下面列出了将用到的最常见的x: 前缀编程构造:
x:Key:为ResourceDictionary中的每个资源设置唯一的键。 在典型的WP7 应用程序标记中的所有x: 用法中,x:Key 将可能占到90%。
x:Class:为XAML 页提供“代码隐藏的类”指定CLR 命名空间和类名,也就是说每个XAML文件后面都有一个与之对应的代码隐藏类(其实就是对应的XAML文件名+.cs)。 必须具有这样一个类才能支持每个WP7 编程模型的代码隐藏,而正是因为如此,即使没有资源,也几乎总是能看到映射的x:。
x:Name:经过XAML处理器处理所有对象元素后,为XAML代码中的实例指定运行时对象名称。 通常,您将为x:Name 经常使用WP7 定义的等效属性。 此类属性特定映射到CLR 后备属性,因此更便于进行应用程序编程,在应用程序编程中,您经常使用运行时代码从初始化的XAML 中查找命名元素。最常见的此类属性是FrameworkElement .Name 。
x:Static:启用一个返回静态值的引用,该静态值只能是一个XAML 兼容属性。
x:Type:根据类型名称构造一个Type 引用。 它用于指定采用Type(例如Style .TargetType )的特性,但属性经常具有本机的字符串到Type 的转换功能,因此使用x:Type 标记扩展用法是可选的。
XAML 中的自定义前缀和自定义类型
对于自定义程序集或PresentationCore、PresentationFramework 和WindowsBase 的WP7 核心以外的程序集,可以将该程序集指定为自定义xmlns 映射的一部分,就可以在XAML 中引用该程序集中的类型。
下面是一个说明自定义前缀如何在XAML 标记中工作的基本示例。前缀custom 在根元素标记中定义,并映射为随应用程序一同打包的一个特定程序集。 此程序集包含NumericUpDown 类型。 通过使用该前缀,可以声明此NumericUpDown 控件的实例对象元素,当XAML 分析器解析到当前元素时,通过前缀custom的声明中指定的命名空间,可找到包含该类型的XAML 命名空间,从而找到包含自定义类型的程序集的位置。
<phone:PhoneApplicationPage
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:custom="clr-namespace:NumericUpDownCustomControl;assembly=CustomLibrary"
>
<StackPanel Name="LayoutRoot">
<custom:NumericUpDown Name="numericCtrl1" Width="100" Height="60"/>
...</StackPanel>
</phone:PhoneApplicationPage>
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
http://blog.csdn.net/mr_raptor/article/details/7227260
++++++++++++++++++++++++++++++++++++++++++
以文本表示时,XAML 文件是通常具有.xaml 扩展名的XML 文件。 可通过任何XML 编码对文件进行编码,但通常编码为UTF-8。
特点:
1. 具有.xaml 扩展名的XML 文件,格式和XML一样
2. 在XAML中定义的元素其实是程序集中定义的类型对象
3. 每一个WP7应用程序中的.xaml文件,都有一个与之对应的代码隐藏文件(XAML文件名+.cs)
XAML文件与代码隐藏文件
由于XAML文件只负责用于表现UI,而UI对应的控制逻辑通常是由与之对应的代码隐藏文件来负责的。在WP7应用程序中,每一个WP7应用程序中的.xaml文件,都有一个与之对应的代码隐藏文件(XAML文件名+.cs),例如:MainPage.xaml对应的代码隐藏文件名字为MainPage.xaml.cs。二者通过XAML文件根元素中x:Class前缀进行连接指定。当UI上的控件产生了事件之后,会通过x:Class前缀中指定的代码隐藏文件命名空间和类名,找到UI处理逻辑,从而进行事件处理(那当然,还要在控件的事件属性中指定事件处理方法例如下面代码:
在根元素x:Class中指定了命名空间和类名为MyTes.MainPage,在Button元素中指定了按钮处理方法Btn_Click,当用户按下按钮时,自动回调代码隐藏文件MainPage.xaml.cs中的Btn_Click事件处理方法。
MainPage.xaml文件
[html] view plaincopy
<phone:PhoneApplicationPage
x:Class="MyTest.MainPage"
...>
<Button Click="Btn_Click" />
</phone:PhoneApplicationPage>
MainPage.xaml.cs代码隐藏文件
[csharp] view plaincopy
namespace MyTest
{
public partial class MainPage : PhoneApplicationPage
{
private void Btn_Click (object sender, RoutedEventArgs e)
{
....
}
}
属性语法
对象的属性通常可表示为对象元素的特性。属性语法命名在属性语法中设置的属性,后跟赋值运算符(=)。属性的值始终以包含在引号中的字符串的形式进行指定。
属性语法是最简单有效的属性设置语法,并且对于曾使用过标记语言的开发人员而言在使用中是最直观的语法。例如,以下标记将创建一个具有红色文本和蓝色背景的按钮,还将创建指定为Content 的显示文本。
[html] view plaincopy
<Button Background="Blue" Foreground="Red" Content="This is a button"/>
属性对象元素语法
对于对象元素的某些属性,属性语法是不可能实现的,因为无法在属性语法的引号和字符串限制内充分地表达提供属性值所必需的对象或信息。对于这些情况,可以使用另一个语法,即属性对象元素语法。
属性元素对象开始标记的语法为<类型名称.属性名称>。 通常,该标记的内容是类型的一个对象元素,属性会将该元素作为其值。指定内容之后,必须用一个结束标记结束属性元素。结束标记的语法为</类型名称.属性名称>。
[html] view plaincopy
<Button>
<Button.Background>
<SolidColorBrush Color="Blue"/>
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="Red"/>
</Button.Foreground>
<Button.Content>
This is a button
</Button.Content>
</Button>
内容属性
如果一个类的内容属性为该类中的唯一一个内容属性,对象元素的子元素可以用于设置该内容属性的值。换言之,仅对内容属性而言,您可以在XAML 标记中设置该属性时省略属性元素,并在标记中生成更直观的父级/子级形式。
[html] view plaincopy
<Border>
<TextBox Width="300"/>
</Border>
当然,你也可以显示的的标明,设置了元素的内容属性为子元素。
[html] view plaincopy
<Border>
<Border.Child>
<TextBox Width="300"/>
</Border.Child>
</Border>
集合语法
XAML 语言包含一些优化,可以生成可读性更好的标记。其中的一项优化是:如果某个特定属性采用集合类型,则您在标记中声明为该属性的值内的子元素的项将成为集合的一部分。在这种情况下,子对象元素的集合是设置为集合属性的值。
下面的示例演示为GradientStops 属性设置值的集合语法:
[html] view plaincopy
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.0" Color="Red" />
<GradientStop Offset="1.0" Color="Blue" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
XAML 根元素和XAML 命名空间
元素名 |
释义 |
<phone:PhoneApplicationPage |
根元素的开始对象元素 |
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" |
默认 XAML 命名空间 |
xmlns:phone="clr-namespace:Microsoft.Phone.Controls; assembly=Microsoft.Phone" |
命名空间phone引用了程序集Microsoft.Phone中的命名空间 |
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" |
XAML 语言 XAML 命名空间 |
x:Class="ExampleNamespace.ExampleCode" |
分部类声明,它将标记连接到为分部类定义的代码隐藏文件 |
> |
根的对象元素的末尾。由于该元素包含子元素,因此对象未结束
|
这些特性向XAML 处理器指明哪些XAML 命名空间包含标记将要作为元素引用的后备类型的类型定义。xmlns 特性明确指示默认的XAML 命名空间。 在默认的XAML 命名空间中,可以不使用前缀指定标记中的对象元素。对于大多数WP7应用程序方案中,默认的XAML 命名空间均映射到为WPF 命名空间http://schemas.microsoft.com/winfx/2006/xaml/presentation。xmlns:x 特性指示另外一个XAML 命名空间,该命名空间映射XAML 语言命名空间http://schemas.microsoft.com/winfx/2006/xaml。
使用xmlns 定义用法范围和名称范围映射的做法符合XML 1.0 规范。XAML 名称范围与XML 名称范围的不同仅在于:XAML 名称范围还包含有关进行类型解析和分析XAML 时名称范围的元素如何受类型支持的信息。
请注意,只有在每个XAML 文件的根元素上,xmlns 特性才是绝对必需的。xmlns 定义将适用于根元素的所有子代元素(此行为也符合xmlns 的XML 1.0 规范。)同时允许根以下的其他元素上具有xmlns 特性,这些特性将适用于定义元素的任何子代元素。 但是,频繁定义或重新定义XAML 命名空间可能会导致XAML 标记样式难以阅读。
其XAML 处理器的实现包括可识别核心程序集的基础结构。因此,为了引用来自WP7程序集中的XAML 元素,只需将默认XAML 命名空间声明为默认 xmlns。
x: 前缀
在上面的根元素示例中,前缀x: 用于映射XAML 命名空间http://schemas.microsoft.com/winfx/2006/xaml,该命名空间是支持XAML 语言构造的专用XAML 命名空间。 在这整个SDK 的项目模板、示例以及文档中,此x: 前缀用于映射该XAML 命名空间。XAML 语言的XAML 命名空间包含多个将在XAML 中频繁用到的编程构造。下面列出了将用到的最常见的x: 前缀编程构造:
x:Key:为ResourceDictionary中的每个资源设置唯一的键。 在典型的WP7 应用程序标记中的所有x: 用法中,x:Key 将可能占到90%。
x:Class:为XAML 页提供“代码隐藏的类”指定CLR 命名空间和类名,也就是说每个XAML文件后面都有一个与之对应的代码隐藏类(其实就是对应的XAML文件名+.cs)。 必须具有这样一个类才能支持每个WP7 编程模型的代码隐藏,而正是因为如此,即使没有资源,也几乎总是能看到映射的x:。
x:Name:经过XAML处理器处理所有对象元素后,为XAML代码中的实例指定运行时对象名称。 通常,您将为x:Name 经常使用WP7 定义的等效属性。 此类属性特定映射到CLR 后备属性,因此更便于进行应用程序编程,在应用程序编程中,您经常使用运行时代码从初始化的XAML 中查找命名元素。最常见的此类属性是FrameworkElement .Name 。
x:Static:启用一个返回静态值的引用,该静态值只能是一个XAML 兼容属性。
x:Type:根据类型名称构造一个Type 引用。 它用于指定采用Type(例如Style .TargetType )的特性,但属性经常具有本机的字符串到Type 的转换功能,因此使用x:Type 标记扩展用法是可选的。
XAML 中的自定义前缀和自定义类型
对于自定义程序集或PresentationCore、PresentationFramework 和WindowsBase 的WP7 核心以外的程序集,可以将该程序集指定为自定义xmlns 映射的一部分,就可以在XAML 中引用该程序集中的类型。
下面是一个说明自定义前缀如何在XAML 标记中工作的基本示例。前缀custom 在根元素标记中定义,并映射为随应用程序一同打包的一个特定程序集。 此程序集包含NumericUpDown 类型。 通过使用该前缀,可以声明此NumericUpDown 控件的实例对象元素,当XAML 分析器解析到当前元素时,通过前缀custom的声明中指定的命名空间,可找到包含该类型的XAML 命名空间,从而找到包含自定义类型的程序集的位置。
<phone:PhoneApplicationPage
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:custom="clr-namespace:NumericUpDownCustomControl;assembly=CustomLibrary"
>
<StackPanel Name="LayoutRoot">
<custom:NumericUpDown Name="numericCtrl1" Width="100" Height="60"/>
...</StackPanel>
</phone:PhoneApplicationPage>
++++++++++++++++++++++++++++++++++++++++++
本文系本站原创,欢迎转载! 转载请注明出处:
http://blog.csdn.net/mr_raptor/article/details/7227260
++++++++++++++++++++++++++++++++++++++++++