当前位置:首页 > Windows程序 > 正文

Windows Phone 一、XAML基础语法

2021-05-25 Windows程序

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>

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/71140.html