XAML的命名空间

命名空间格式:语法结构为“xmlns:”+“命名空间前缀名”,默认命名空间无需定义命名空间前缀名“xmlns”

命名空间的声明

<Page

x:Class="App1.MainPage"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="using:App1"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

mc:Ignorable="d"

Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

命名空间的用途:约束文档规范,明确标签的类型。

xmlns(XML Namespace)默认命名空间

xmlns:x 可以理解为给命名空间起别名

xmlns不是XAML中特有或特别定义的,它是XML具备的,目的是为了约束XML的文档结构

xmlns:d 和 xmlsn:ms 是为 Visual Studio 设计视图服务的,不会对程序造成任何影响

URI 统一资源定位符:"http://schemas.microsoft.com/winfx/2006/xaml"

XAML名称范围(x:)语言特性

x:Class

配置XAML编译,在标记和代码隐藏之间连接分部类。代码分部类在一个独立的代码文件中定义,标记分部类由代码是由XAML在编译过程间创建。

<object

x:Class="namespace.classname"...>

...

</object>

x:FieldModifier

修改XAML编译行为,使指定对象引用的字段被定义有public访问权限而不是默认的private行为。

<object

x:FieldModifier="public"

... />

x:Key

唯一标识作为资源被创建和引用的元素,这些资源存在于一个ResourceDictionary中。

<ResourceDictionary>

<object x:Key="stringKeyValue".../>

</ResourceDictionary>

隐式 ResourceDictionary 中使用:

<object.Resources>

<object x:Key="stringKeyValue".../>

</object.Resources>

x:Name

唯一标识对象元素,可方便从代码隐藏或一般代码中访问已实例化的对象。应用于支持的编程模型之后,x:Name可视为等效于持有一个对象引用(由一个构造函数返回)的变量。

x:Key和x:Name不是相同的概念。

x:Key仅用于资源词典中。

x:Name用于XAML的所有区域。

一个使用键值的FindName调用不会检索键资源。

x:Uid

为标记元素提供一个唯一标识符。对于Windows运行时XAML,这个唯一标识符供XAML本地化过程和工具使用。

<Button

x:Uid="ResourceKey"

Content="被资源中键为“ResourceKey.Content的值替换”"/>

开发多语言化系统时会经常用到。

其他XAML固有数据类型,就是常见的简单数据类型的声明:

x:Boolean

对于CLR支持来说,原语对应于Boolean。XAML分析x:Boolean的值时区分大小写。请注意,"x:Bool"不是可接受的替代原语。

x:String

对于CLR支持来说,原语对应于String。对字符串的编码默认采用包围XML编码。
x:Double

对于CLR支持来说,原语对应于Double。除了数字值,x:Double的文本语法支持令牌 "NaN",这是将布局行为的"Auto"存储为资源值的方式。对这些令牌的处理区分大小写。你可以使用科学计数法,例如将1,000,000 记为"1+E06"。

x:Int32

对于CLR支持来说,原语对应于Int32x:Int32被视为带有符号,你可以为负整数包含减号(“-”)。在XAML中,文本语法中缺少符号表示有符号正值。

对象声明方式

使用开始标记和结束标记将对象实例化为XAML格式的元素

<Canvas>

</Canvas>

对象中可以包含其他对象

<Canvas>

<Rectangle></Rectangle>

</Canvas>

若一个对象中不包含其他对象,可以使用一个自结束标记来声明对象

<Rectangle/>

XAML创建对象元素

  • 标签名即控件名称
  • 一个XAML文件只允许有一个根对象元素Page
  • 标签属性或子标签为控件对象属性操作
  • 每个XAML标签都会有一个相对应的类型
  • 每声明一个XAML节点就相当于创建相应类型的对象
  • 在哪个元素结点下添加标签就相当于在哪个对象下添加对象

属性设置四种方式

ž          属性键值语法

ž          属性元素语法

ž          内容元素语法

ž          隐式集合语法

不同的属性类型我们可以选择不同的设置方式

简单类型数据,比如字符串、数字之类的使用键值形式,即PropName=“PropValue”
复杂类型数据,比如文本块值、按钮内容、背景图片,使用属性元素形式
内容元素语法(默认语法)为了方便
集合性质使用集合语法

属性键值语法:

只有实例化对象才可以设置实例属性,格式如下:

<objectName propertyName=“propertyValue”/>

或者

<objectName propertyName=“propertyValue”>

<objectName>

每个属性对应一个属性值,属性值类型必须与属性匹配

一个标记中可以设置对象的多个属性

objectName是要实例化的对象,propertyName是需要设置的属性名称,propertyValue是属性的值

<Canvas Width=”150” Height=”150” Background=”Red”/>

或者

<Canvas Width=”150” Height=”150” Background=”Red”>

</Canvas>

绝大多数属性都是使用属性键值的形式来操作

要求属性类型必须为一些“简单的/可以自动转换的”类型

内置属性类型转换器

仅针对一些复杂类型的控件属性

用于将XAML属性中设置的字符串转换成为相应的强类型数据

例如:

<Button

x:Name="btn"

HorizontalAlignment="Left"/>

对比

btn.HorizontalAlignment = HorizontalAlignment.Left;

XAML中只需要将HorizontalAlignment属性设置为Left字符串即可将控件的水平对其属性改为左对齐

属性元素语法

某些属性可以使用属性元素语法来设置,格式为:

<object>

<object.property>

<!—元素属性值-->

</object.property>

</object>

如果一个对象的属性是一个复杂类型,不能够由简单的字符串直接表示的时候,这时需要用到属性元素的语法:

<标签名>

<标签名.属性名>

<属性值/>

</标签名.属性名>

</标签名>

文本块值,按钮内容,背景图片

<Ellipse Width=”150” Height=”150”>

<Ellipse.Fill>

<SolidColorBrush Color=”Green”/>

</Ellipse.Fill>

</Ellipse>

内容元素语法

某些元素的属性支持内容元素语法,允许忽略元素的名称

实例对象会根据XAML元素中的第一个标记值来设置属性

对于大量的格式化文本,使用内容元素语法更加灵活

属性标记之间可以插入大量的文本内容

<TextBlock>Windows 10</TextBlock>

对于大多数对象元素都有一个默认属性;

直接将元素的 “InnerText” 设置为属性值:

例如:

<Button x:Name="btn1" Content="Hello"/>

<Button x:Name="btn2">

World

</Button>

通过特性标签知道默认属性

[ContentProperty(Name = "Content")]

隐式集合语法

元素支持一个属性元素的集合,才使用集合语法进行设置属性

使用托管代码的Add方法来增加更多的集合元素

本质是向对象的集合中添加属性项

在此之前我们考虑的都是非集合性质的属性;

对于一个集合类的属性可以用重复子元素的方式实现设置值:

<Grid>

<Grid.Children>

<TextBlock>Hello1</TextBlock>

<TextBlock>Hello2</TextBlock>

<TextBlock>Hello3</TextBlock>

<TextBlock>Hello4</TextBlock>

<TextBlock>Hello5</TextBlock>

</Grid.Children>

</Grid>

<Rectangle Width=”200” Height=”150”>

<Rectangle.Fill>

<LinearGradientBrush>

<GradientStopCollection>

<GradientStop Offset=”0.0” Color=”Gold”/>

<GradientStop Offset=”1.0” Color=”Green”/>

</GradientStopCollection>

</LinearGradientBrush>

</Rectangle.Fill>

</Rectangle>

<Rectangle Width=”200” Height=”150”>

<Rectangle.Fill>

<LinearGradientBrush>

<LinearGradientBrush.GradientStops>

<GradientStop Offset=”0.0” Color=”Gold”/>

<GradientStop Offset=”1.0” Color=”Green”/>

</LinearGradientBrush.GradientStops>

</LinearGradientBrush>

</Rectangle.Fill>

</Rectangle>

省略GradientStopCollection隐式的属性设置方法

附加属性

附加属性作用于支持附加属性的元素

附加属性是由支持附加属性的父元素产生作用,支持附加属性的元素会继承所在的父元素的属性

附加属性的格式:AttachedPropertyProvider.PropertyName

AttachedPropertyProvider为附加属性的提供者,PropertyName为附加属性的名称

<Canvas>

<Rectangle Canvas.Left=”50” Canvas.Top=”50” Width=”200” Height=”150” RadiusX=”10” RadiusY=”10” Fill=”Gold”/>

</Canvas>

Rectangle元素设置了Canvas.Left和Canvas.Top属性,使用Canvas进行布局时,包含在<Canvas>…</Canvas>之间的元素就会产生相对于Canvas对象的附加属性Canvas.Left和Canvas.Top属性

依赖属性

英文名称:Dependency Properties

依赖属性和CLR属性类似,提供一个实例级私有字段的访问封装,通过GetValue和SetValue访问器实现属性的读写操作

最重要一个特点是属性值依赖于一个或者多个数据源,提供这些数据源的方式也可以不同

由于依赖多数据源的缘故,故称之为依赖属性

XAML的路由事件(Routed Events)处理方式可分为三种:

冒泡事件(Bubbling Event),该事件是最常见的事件处理方式。该事件表示对象激活事件后,将沿着对象树由下至上,由子到父的方式传播扩散,直到被处理或者到达对应的根对象元素,或者该事件对应得RoutedEventArgs.Handled=true时,完成处理。在传播扩散中,所有涉及的元素对象都可以被该事件进行控制。该事件可被Windows 8,Silverlight支持。

隧道事件(Tunneling Event),该事件处理方式和冒泡事件相反,对象激活事件后,将从根对象元素传播扩散到激活事件的子对象,

或者该事件对应得RoutedEventArgs.Handled=true时,完成处理。该事件仅Windows 8支持。

直接路由事件(Direct Routing Event),该事件没有向上或者向下传播扩散,仅作用于当前激活事件的对象上。该事件可被Windows 8,Silverlight支持。

常见的标记扩展

Binding标记扩展

{Binding}提供一个data-bound属性值,使该值可延迟到运行时。绑定标记扩展会在XAML 加载时转换为一种中间表达式对象。数据绑定引擎在运行时使用表达式和数据上下文来确定属性值。

CustomResource标记扩展

通过计算对一个来源于自定义资源查找实现的资源的引用,为任何XAML属性提供一个值。资源查找是通过CustomXamlResourceLoader类实现执行的。

RelativeSource标记扩展

提供一种方式,在运行时对象图中以相对关系形式指定绑定来源。

StaticResource标记扩展

通过计算对一个已定义资源的引用,为任何XAML属性提供一个值。资源在一个ResourceDictionary中定义,一种StaticResource用法在ResourceDictionary中引用该资源的键。

TemplateBinding标记扩展

将一个控件模板中的属性值链接到模板控件上其他某个公开的属性的值。TemplateBinding只能在XAML中的一个ControlTemplate定义中使用。

ThemeResource标记扩展

使用根据当前处于活动状态的主题检索不同资源的附加系统逻辑,通过计算对某个资源的引用来为任何XAML属性提供值。与StaticResource类似,资源是在ResourceDictionary中定义的,并且ThemeResource用法引用ResourceDictionary中的该资源的键。

Windows Phone 一、XAML基础语法的更多相关文章

  1. Windows CMD .bat 批处理基础语法

    格式 @echo off 代码..... pause 不会逐行将命令打印. rem [注释] 关键字注释. :: [注释] 符号注释. echo 打印到控制台. >> 输出重定向.追加. ...

  2. Xamarin XAML语言教程基础语法篇大学霸

    Xamarin XAML语言教程基础语法篇大学霸 前  言 Xamarin是一个跨平台开发框架.它可以用来开发iOS.Android.Windows Phone和Mac的应用程序.使用Xamarin框 ...

  3. Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。

    Python3 与 C# 面向对象之-继承与多态   文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...

  4. 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null

    [源码下载] 背水一战 Windows 10 (26) - XAML: x:DeferLoadStrategy, x:Null 作者:webabcd 介绍背水一战 Windows 10 之 XAML ...

  5. Sass的使用和基础语法

    sass安装 官网下载ruby的windows安装包,安装时勾选上添加到环境变量add ruby executables to your path.安装完成后打开命令行,ruby -v输出内容则安装完 ...

  6. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  7. C#基础语法(一)

    一.基础语法 1.C#区分大小写,所以myVar和MyVar是两个不同的变量. 2.每个C#可执行文件(如控制台应用程序,Windows应用程序和Windows服务)都必须有一个入口点----Main ...

  8. python2.7入门---简介&基础语法

    Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构.基于上述原因, ...

  9. Markdown 简介及基础语法

    一.Markdown 简介 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 二.Markdown 基础语法 1. Markdown ...

随机推荐

  1. [R语言]R语言使用多线程对数据库进行大批量访问时出现无法连接问题

    问题描述: 在R中使用多线程对数据库进行写入,在服务器端运行脚本(linux环境),总是在第6-7万个任务线程时,出现无法连接到数据库的问题.任务中断,错误信息为task 6xxxx failed,C ...

  2. JavaScript中的this指向

    this是谁 技术一般水平有限,有什么错的地方,望大家指正. this代指当前对象super调用父类的构造函数,应表会运网数物,加载驱动建立链接执行SQL处理结果,直到现在每想起这三点就能想起我上大学 ...

  3. java实例化对象的方式

    一.Java中创建(实例化)对象的五种方式  1.用new语句直接创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); ...

  4. 黑科技装点圣诞节,美国邮政局用AR APP邮寄圣诞包裹

    AR手游<精灵宝可梦Go>的出现将增强现实技术带到了众人的视线中,各大公司纷纷紧抓AR的发展前景,同时积极将AR功能引入自家产品中.临近圣诞,又到了一年一度的快递高峰期,据591ARVR资 ...

  5. crawler4j 学习

    crawler4j 学习(一) crawler4j是一个轻量级多线程网络爬虫,开发者可以调用相应的接口在短时间内创建一个多线程网络爬虫. 前期准备 使用maven 为了使用最近版本的crawler4j ...

  6. MSSQL 跨服器调用存储过程

    A库 CREATE PROCEDURE [dbo].[A_P_Test] AS BEGIN SELECT * FROM dbo.A_LoadData END B库  在B中调用A库存储过程 注:是同一 ...

  7. BOM,文档宽高及窗口事件小析

    (一)BOM:Browser Object Model(浏览器对象模型)页面上所有的变量都是window的属性 一.方法:1. open(,)打开一个新窗口(页面)一参为页面地址url,二参为打开方式 ...

  8. 初用idea建立javaweb遇到的问题与心得

    1.直接用idea建立的web项目,其自动生成的web.xml里version=3.1,这样的话建立servlet-name等标签会报错(因为3.1不支持这种做法,更提倡用注解的办法),解决办法是将w ...

  9. 01@MySQL_Course_LabVIEW+MySQL程序开发

    LabVIEW+MySQL程序开发 大数据时代,LabVIEW程序开发怎么能少了数据库这一强大的工具,然而大多数的LabVIEW工程师对于数据库的概念了解比较少,所以本课程重点介绍如何利用MySQL, ...

  10. 10款最新流行的 jQuery 插件,值得你收藏

    10款最新流行的 jQuery 插件,值得你收藏 http://www.cnblogs.com/lhb25/p/10-new-popular-jquery-plugins-check.html 你应该 ...