XAML基础:属性赋值与特殊属性应用
立即解锁
发布时间: 2025-08-26 00:48:22 阅读量: 13 订阅数: 46 AIGC 


Silverlight 4商业应用开发指南
### XAML 基础:属性赋值与特殊属性应用
#### 1. IntelliSense 在 XAML 中的作用
在 Visual Studio 2010 中,IntelliSense 在声明命名空间和引用其中的控件时非常有用。具体操作如下:
- 当输入命名空间前缀并按下 `=` 时(例如 `xmlns:data=`),IntelliSense 会显示项目中引用的所有命名空间及其对应程序集的列表。可以从列表中选择一个命名空间,然后按 `Tab` 键将命名空间和程序集名称插入到声明中。
- 使用设计器时,将工具箱中的控件拖放到设计图面(如果该控件所在的命名空间当前未声明),会自动声明其命名空间并分配一个默认的命名空间前缀。
- 使用控件时,输入元素的开始标签(以 `<` 开头)会显示文件中定义的命名空间前缀列表,以及默认命名空间中的控件。选择或输入命名空间前缀后,IntelliSense 会显示映射命名空间中的控件列表供选择。
虽然 XAML 中声明命名空间和使用控件的语法一开始可能看起来很复杂,但 IntelliSense 让编写这些 XAML 变得轻松。
#### 2. 为控件分配属性值
在将控件元素插入到 XAML 文件后,通常需要为该控件设置一些属性值。可以使用 Visual Studio 和 Expression Blend 中的“属性”窗口来完成(大多数情况下),也可以在 XAML 中使用不同的方法,具体方法取决于属性的性质和要分配的值。
##### 2.1 属性语法(Attribute Syntax)
这是在 XAML 中为属性赋值的最简单方法,使用内联方式设置属性值。当属性具有基本类型(如字符串、整数、布尔值等),或者属性的类型有一个关联的类型转换器可以接受字符串并将其转换为该类型时,使用这种语法。所有值都应该用单引号或双引号(最好是双引号)括起来。例如:
```xml
<Button Content="Hello" />
```
##### 2.2 内容元素语法(Content Element Syntax)
有些控件定义了一个属性,其内容(即开始标签和结束标签之间的 XAML)将被分配给该属性的值,这就是内容元素语法。控件通过在其类上使用 `ContentProperty` 属性来定义这个内容属性。大多数定义为内容属性的属性名为 `Content`。例如:
```xml
<Button>Hello</Button>
```
使用内容元素语法时,值周围不需要引号。之所以有属性语法和内容元素语法两种方式,是因为许多内容属性可以接受复杂的值(如 XAML),而属性语法无法处理这种情况。例如,Silverlight 的 `Button` 控件的 `Content` 属性可以接受任何 XAML 对象层次结构作为按钮的内容:
```xml
<Button Width="80" Height="35">
<StackPanel Orientation="Horizontal">
<Image Source="accept.png" Width="16" Height="16" />
<TextBlock Margin="7,0,0,0" Text="OK" />
</StackPanel>
</Button>
```
需要注意的是,除非内容属性是一个集合,否则分配给它的内容只能由单个控件 XAML 元素组成(该元素可以根据需要有子元素),否则会出现“属性 XXX 被设置了多次”的错误。
##### 2.3 属性元素语法(Property Element Syntax)
如果要将复杂的值分配给控件上未定义为内容属性的属性,可以使用属性元素语法。需要在控件元素的开始标签和结束标签之间创建一个新元素,形式为 `<control.property>`,元素名称中的点号向 XAML 解析器表明这是一个属性元素而不是对象元素。例如:
```xml
<Button Width="80" Height="35">
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image Source="accept.png" Width="16" Height="16" />
<TextBlock Margin="7,0,0,0" Text="OK" />
</StackPanel>
</Button.Content>
</Button>
```
通常会使用属性元素语法为控件的 `Resources` 属性分配资源,或者为任何可以在 XAML 中定义复杂值的控件属性赋值。但如果该属性被指定为内容属性,则通常使用内容元素语法,省略属性元素的标签。
##### 2.4 集合语法(Collection Syntax)
能够接受 XAML 内容的属性通常只能分配单个控件(该元素可以有自己的子元素),除非该属性是集合类型。如果属性是集合类型,可以使用集合语法将项(通常是控件)分配给该集合,值中定义的每个顶级元素都会作为一个项添加到集合中。例如,`ComboBox` 控件的 `Items` 属性是一个集合,可以使用内容元素语法为其分配控件:
```xml
<ComboBox>
<ComboBoxItem Content="First item" />
<ComboBoxItem Content="First item" />
<ComboBoxItem Content="Third item" />
<ComboBoxItem Content="Fourth item" />
</ComboBox>
```
#### 3. 附加属性(Attached Properties)
附加属性是一种特殊类型的属性,它们在一个控件上赋值,但实际上这些属性是在另一个控件(通常但不总是在层次结构中更高的位置)上定义和所属的。控件可以将特定属性注册为附加属性,然后任何控件都可以使用这些属性。
例如,`Canvas` 控件需要知道如何在其表面上定位 `Button` 控件,因此它将 `Left` 和 `Top` 属性作为附加属性公开,`Button` 控件可以使用这些属性让 `Canvas` 相应地定位按钮:
```xml
<Canvas>
<TextBox Canvas.Left="30" Canvas.Top="15" />
</Canvas>
```
使用附加属性时,这些值实际上属于设置它们的控件。
`ToolTipService` 控件使用附加属性为控件提供工具提
0
0
复制全文
相关推荐









