整理自某下载的PPT《XAML基础教程》
1 XML与XAML
1.XML指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似HTML标记语言 XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义,需要自行定义标签 示例:
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
2.XAML语言是ExtensibleApplication Markup Language的简称,中文称为“可扩展应用程序标记语言” 控件层次结构一目了然 UI代码与业务逻辑代码相隔离 声明式语言,更便于利用工具自动生成代码 XAML标记通常使用与XML中相同的字符实体和转义序列 主要用于Silverlight,WPF,Windows Phone和Windows 8应用开发 示例:
2 C#与XMAL
C#与XAML呈现效果方式不同:
1.C#编译后执行
2.XAML不需要编译,加载后解析就可呈现
3 为什么要学习XAML
1.XAML语言应用于多个开发领域,Web应用,移动应用,桌面应用等
2.对于具有Silverlight,WPF, Windows Phone以及Windows 8开发经验的程序员,可以将开发技能再利用,加快学习速度,提高开发效率;
3.语言性能强大,学习曲线平缓, 有强大的开发工具支持,例如,使用微软Expression Studio或者VisualStudio开发工具,可快速便捷的创建XAML相关应用;
4.随着Windows8的发布, XAML是Windows 8 Style应用主要开发语言之一,从Windows 8开发路线上可以看出,XAML将与C#,VB.NE,C++配合开发Windows8 Style应用。
4 XAML的作用
1.XAML用于声明UI及UI元素的一种格式 2.XAML用于声明样式和模板的格式,这些样式和模板应用于控件和UI的逻辑基础 3.XAML 定义UI的可视外观,关联的代码隐藏文件定义逻辑。可以对UI设计进行调整,而不必更改代码隐藏中的逻辑。 就此作用而言,XAML简化了负责主要可视化设计的人员与负责应用程序逻辑和信息设计的人员之间的工作流。 4.XAML 可在Expression Blend与Visual Studio之间互换。
5 属性设置
属性是对 XAML 元素特征进行描述的 方法 属性不允许在 XAML 中重复设置多次 允许在托管代码中改变元素的属性值
属性 设置 几种方式 使用属性语法/ 使用属性 元素 语法/ 使用内容 元素 语法/ 使用集合 语法
5.1 属性语法
只有实例化对象才可以设置实例属性 , 格式 如下 :
<objectNamepropertyName=“propertyValue”/>
或者
<objectNamepropertyName=“propertyValue”>
</objectName>
objectName是要实例化的对象,propertyName是需要设置的属性名称,propertyValue是属性的值
每个属性对应一个属性值,属性值类型必须与属性匹配 一个标记中可以设置对象的多个属性
<Canvas Width="150" Height="150" Background="Red"/>
或者
<Canvas Width="150" Height="150" Background="Red">
</Canvas>
5.2 属性元素语法
某些属性可以使用属性元素语法来设置,格式为:
<object>
<object.property>
<!—元素属性值-->
</object.property>
</object>
Property是object元素的属性,<object.property>…</object.property>之间包含的是对象属性的值
<Ellipse Width="150" Height="150">
<Ellipse.Fill>
<SolidColorBrush Color="Green"/>
</Ellipse.Fill>
</Ellipse>
5.3 内容元素语法
某些元素的属性支持内容元素语法,允许忽略元素的名称 实例对象会根据 XAML 元素中的第一个标记值来设置属性 对于 大量的格式化文本,使用内容元素语法更加灵活 属性标记之间可以插入大量的文本内容
<TextBlock Width="200"TextWrapping="Wrap>Windows 8</TextBlock>
5.4 集合语法
元素支持一个属性元素 的集合 ,才使用集合语法进行设置属性 使用托管代码的 Add 方法来增加更多的集合元素 本质是向对象的集合中添加属性项
<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>
下面代码实际省略了省略GradientStopCollection,隐式的属性设置方法
<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>
附加属性
附加属性作用于支持附加属性的元素 附加属性是由支持附加属性的父元素产生作用,支持附加属性的元素会继承所在的父元素的属性 附加属性的格式: 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属性
依赖属性
英文名称: DependencyProperties 依赖 属性 和 CLR 属性类似 ,提供 一个实例级私有字段的访问封装,通过 GetValue 和 SetValue 访问器实现属性的读写 操作 最重要一个特点是 属性值依赖于一个或者多个数据源,提供这些数据源的方式也可以 不同 由于依赖多数据源的缘故,故称之为依赖属性 1. 依赖属性最重要的一个特点是属性值依赖于一个或者多个数据源,提供这些数据源的方式也可以不同,例如,通过数据绑定提供数据源,通过动画,模板资源,样式等方式提供数据源等,在不同的方式数据源下,依赖属性可以实时对属性值进行改变。
<Page.Resources>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Foreground" Value="Red"/>
<Setter Property="FontSize" Value="24"/>
</Style>
</Page.Resources>
<Button Content="依赖属性测试" Style="{StaticResource ButtonStyle}" Width="240"/>
1. 定义简单用户控件样式,样式代码中定义了控件的内容文本颜色,字体尺寸 2. Button 应用定义好的资源样式 ButtonStyle
<Button Content="依赖属性测试" Style="{StaticResource ButtonStyle}" Width="240" Foreground="Yellow" FontFamily="14"/>
1. 按钮控件中定义文本颜色,字体尺寸,同时也调用静态资源样式 ButtonStyle 2. 根据之前讲述的,依赖属性执行的优先级,按钮控件的本地赋值优先于控件样式 3. 因此上述代码中,忽略了 ButtonStyle 样式,应用本地依赖属性值生成不同结果
6 事件(Event)
Windows消息机制中重要概念之一,最常见的人机交互手段之一 XAML帮助应用管理用户输入,执行不同的行为 引入增强型事件处理系统-Routed Event(路由事件) Windows 8应用开发中,事件常常被用于控制更改通知操作
基础语法:<ObjectNameEventName=“EventHandle”>
XAML:
<Button Click="Button_Click_1"/>
C#:
private void Button_Click_1(object sender,RoutedEventArgs e)
{
}
1. 事件在 Xaml 中基础语法如下: < 元素对象 事件名称 =” 事件处理” /> 2. 在实际项目开发中, VisualStudio 的 Xaml 语法解析器为开发人员提供了智能感知功能,通过该功能可以在 Xaml 中方便的调用指定事件,而 Visual Studio 将为对应事件自动生成事件处理函数后台代码。