WPF_XAML详解
什么是 XAML?
XAML 是一种声明性标记语言。 如应用于.NET Framework编程模型一样,XAML 简化了为.NET Framework应用的 UI 创建过程。 你可以在声明性 XAML 标记中创建可见的 UI 元素,然后使用代码隐藏文件(这些文件通过分部类定义与标记相联接)将 UI 定义与运行时逻辑相分离。
XAML是区分大小写的,因此一定要按照对应的大小写来书写
基本语法
对象元素
对象元素语法始终以左尖括号 (`<`) 开头。 后跟要创建实例的类型的名称。此后可以选择声明该对象元素的特性。 要完成对象元素标记,请以右尖括号 (`>`) 结尾。 也可以使用不含任何内容的自结束形式,方法是用一个正斜杠后接一个右尖括号 (`/>`) 来完成标记
<!-- 包含内容的实例 -->
<StackPanel>
<!-- 不包含内容的实例 -->
<Button/>
</StackPanel>
特性(属性)
对象的属性通常可表示为对象元素的特性。 特性语法对设置的对象属性命名,后跟赋值运算符 (=)。 特性的值始终指定为包含在引号中的字符串。不同的特性将会赋予对象元素不同的效果
<Button Content="内容" Background="Red" Foreground="#FFFFFF"/>
属性元素语法
对于对象元素的某些属性,无法使用特性语法,因为无法在特性语法的引号和字符串限制内充分地表达提供属性值所必需的对象或信息。
对于这些情况,可以使用另一个语法,即属性元素语法。
属性元素开始标记的语法为 `<TypeName.PropertyName>`。 通常,该标记的内容是类型的对象元素,属性会将该元素作为其值。 指定内容之后,必须用结束标记结束属性元素。 结束标记的语法为 `</TypeName.PropertyName>`。下例写法和上例等价
<Button>
<Button.Content>
测试
</Button.Content>
<Button.Background>
Red
</Button.Background>
<Button.Foreground>
<SolidColorBrush Color="#FFFFFF"/>
</Button.Foreground>
</Button>
集合语法
XAML 语言包含一些优化,可以生成更易于阅读的标记。 其中一项优化是:如果某个特定属性采用集合类型,则在标记中声明为该属性的值内的子元素的项将成为集合的一部分。
<Button.Background>
<LinearGradientBrush EndPoint="0,0" StartPoint="1,1">
<!-- GradientStop便是集合中的某一项 -->
<GradientStop Color="Red" Offset="0"/>
<GradientStop Color="Green" Offset="1"/>
</LinearGradientBrush>
</Button.Background>
内容属性
XAML 指定了一个语言功能,通过该功能,类可以指定它的`一个且仅一个`属性作为 XAML 的内容
<!--利用内容属性语法并省略 Border.Child 属性元素-->
<Border Width="100" Background="Red" Height="22">
<Button Width="94" Height="20" >测试</Button>
</Border>
<!--上面代码本质上就是-->
<Border Width="100" Background="Red" Height="22">
<Border.Child>
<Button Width="94" Height="20" >测试</Button>
</Border.Child>
</Border>
有少量 XAML 元素可直接将文本作为其内容来处理,如上例中的`Button`,只要元素接收`Content`属性作为内容,就可以这样做。下例中两个按钮等价
<Button Content="测试按钮"/>
<Button>测试按钮</Button>
事件
特性语法还可用于事件成员,在这种情况下,特性的名称为事件的名称,特性的值为实现该事件的委托的处理程序的名称
下例中将`Button`的`Click`事件分配给类中的`Button_Click`方法
<Button Click="Button_Click" >Click Me!</Button>
标记扩展
用于提供特性语法的值时,大括号(`{}`)表示标记扩展用法。 此用法指示 XAML 不要像通常那样将特性值视为文本字符串或者可转换为字符串的值进行处理。
最常用的标记扩展是 Binding用于数据绑定表达式)以及资源引用 StaticResource和DynamicResource 通过使用标记扩展,即使属性通常不支持特性语法,也可以使用特性语法为属性提供值。
<Window.Resources>
<Style TargetType="Border" x:Key="PageBackground">
<Setter Property="Background" Value="Blue"/>
</Style>
</Window.Resources>
<StackPanel>
<!-- 指定使用x:Key为PageBackground的Style对象元素作为Style -->
<Border Style="{StaticResource PageBackground}">
</Border>
</StackPanel>
类型转换器
很多 WPF 类型或这些类型的成员扩展了基本字符串特性处理行为,因此可以将更复杂的对象类型的实例指定为字符串和特性。
Thickness 结构是一个类型示例,该类型拥有可使用 XAML 的类型转换。 Thickness指示嵌套矩形中的度量,可用作属性(如 Margin) 的值
以下两种写法完全等效
<Button Margin="10,20,10,30" Content="Click me"/>
<Button Content="Click me">
<Button.Margin>
<Thickness Left="10" Top="20" Right="10" Bottom="30"/>
</Button.Margin>
</Button>
XAML根元素
一个 XAML 文件只能有一个根元素,这样才能同时作为格式正确的 XML 文件和有效的 XAML 文件,对于典型 WPF 方案,可使用在 WPF 应用模型中具有突出意义的根元素(例如,页面的 Window或 Page外部字典的 ResourceDictionary 或应用定义的 Application
“x:”前缀
* x:Key:为 ResourceDictionary(或其他框架中的类似字典概念)中的每个资源设置唯一的键。 在典型的 WPF 应用标记中的所有 `x:` 用法中,`x:Key` 可能占到 90%。
* x:Class:向为 XAML 页提供代码隐藏的类指定 CLR 命名空间和类名。 必须具有这样一个类才能支持每个 WPF 编程模型的代码隐藏
* x:Name:处理对象元素后,为运行时代码中存在的实例指定运行时对象名称。等价于`Name`属性,在特定类型中不支持 Name属性时,仍然可以使用 x:Name。
本文来源网络如有侵权请联系删除!!!




被折叠的 条评论
为什么被折叠?



