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. 归一化交叉相关Normalization cross correlation (NCC)

    归一化交叉相关Normalization cross correlation (NCC) 相关系数,图像匹配 NCC正如其名字,是用来描述两个目标的相关程度的,也就是说可以用来刻画目标间的相似性.一般 ...

  2. js 闭包之一

    既然说闭包的化,我们就先来说说函数.慢慢的进入进入正题 (1)函数申明 f1(); function f1(){ alert(") }//结果 1 (2)函数定义 f1();var f1=f ...

  3. c#实现简单金山打字小游戏(源码)

    using GameDemo.Utils;using System;using System.Collections.Generic;using System.Linq;using System.Te ...

  4. About_类与对象02

    FCKeditor文本编辑程序(共享软件)为用户提供在线的文档编辑服务,其具有与微软office软件一样的功能,与之不同的是FCKeditor不需要用户安装任何形式的客户端,FCKeditor程序非常 ...

  5. Bean不同配置方式的比较

    在<Spring3.x 企业应用开发实战>上学习了Bean的三种不同配置方法,下图是我从书中截取的图片,比较了一下这三种配置的异同 ps:发现图片不能完全显示(右侧有一块不显示),解决方法 ...

  6. 关于java.lang.NoSuchMethodError: android.widget.RelativeLayout.setBackground的解决办法

    今天用一个安卓4.0.4版本的手机测试手上的项目,发现logcat弹出这样一个提示“java.lang.NoSuchMethodError: android.widget.RelativeLayout ...

  7. 树莓派+移动硬盘搭建NAS服务器

    由于树莓派的USB接口不足以给移动硬盘供电,因此需要另外给移动硬盘提供电源. 显示当前已有的存储设备 # fdisk -l Disk /dev/mmcblk0: 7876 MB, 7876902912 ...

  8. 不小心删除了sysWOW64下的webio.dll

    weibo的桌面客户端留了一个服务,在syswow64目录下留了个exe文件,看着旁边好像还有个weibo.dll,就把试着也删除了,但是删除不掉,我就进安全模式删除了(f8在Windows的启动界面 ...

  9. VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法(转自网络)

    最近开始使用VS2010,在引用COM组件的时候,出现了无法嵌入互操作类型“……”,请改用适用的接口的错误提示.查阅资料,找到解决方案,记录如下: 选中项目中引入的dll,鼠标右键,选择属性,把“嵌入 ...

  10. python零碎知识点一

    dir(object),列出对象所有可以用的的方法(参数可以为任意对象,例如class,func等) >>>dir('str') ['__add__', '__class__', ' ...