XAML基础与应用详解
立即解锁
发布时间: 2025-08-26 01:35:02 阅读量: 15 订阅数: 21 AIGC 


Silverlight 4 in VB: 创建跨平台浏览器应用
### XAML 基础与应用详解
#### 1. XAML 基本结构
XAML 文档通常具有嵌套的元素结构,以下是一个简化示例,展示了整体结构:
```xml
<UserControl x:Class="EightBall.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="400" Height="300">
<Grid x:Name="grid1">
<Grid.Background>
...
</Grid.Background>
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
<TextBox x:Name="txtQuestion" ... >
</TextBox>
<Button x:Name="cmdAnswer" ... >
</Button>
<TextBox x:Name="txtAnswer" ... >
</TextBox>
</Grid>
</UserControl>
```
这个示例包含了一个 `UserControl`,其中嵌套了一个 `Grid`,`Grid` 内又包含了 `TextBox` 和 `Button` 等元素。
#### 2. 简单属性与类型转换器
- **属性设置**:XML 元素的属性用于设置对应的 Silverlight 对象的属性。例如,在八球示例中,文本框的对齐方式、边距和字体可以这样配置:
```xml
<TextBox x:Name="txtQuestion"
VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
FontFamily="Verdana" FontSize="24" Foreground="Green" ... >
```
这要求 `System.Windows.Controls.TextBox` 类提供 `VerticalAlignment`、`HorizontalAlignment`、`FontFamily`、`FontSize` 和 `Foreground` 等属性。
- **特殊字符处理**:一些特殊字符不能直接输入到属性字符串中,如引号、& 符号和尖括号。需要使用等效的 XML 字符实体来替代,如下表所示:
| 特殊字符 | XML 字符实体 |
| ---- | ---- |
| " | " |
| & | & |
| < | < |
| > | > |
- **类型转换**:XAML 解析器需要将 XML 属性中的字符串值转换为对象的实际属性类型。类型转换器是实现这种转换的基础设施,它提供了将特定 .NET 数据类型与其他 .NET 类型(如字符串)相互转换的实用方法。XAML 解析器查找类型转换器的步骤如下:
1. 检查属性声明,查找 `TypeConverter` 属性。如果存在,该属性指示可以执行转换的类。
2. 如果属性声明中没有 `TypeConverter` 属性,解析器会检查相应数据类型的类声明。
```mermaid
graph LR
A[XAML 解析器] --> B{属性声明有 TypeConverter 属性?}
B -- 是 --> C[使用指定类进行转换]
B -- 否 --> D{类声明有 TypeConverter 属性?}
D -- 是 --> E[使用指定类进行转换]
D -- 否 --> F[生成错误]
```
#### 3. 复杂属性
- **属性 - 元素语法**:对于一些复杂的属性,类型转换器可能不实用。XAML 提供了属性 - 元素语法,通过添加一个名为 `Parent.PropertyName` 的子元素来设置复杂属性。例如,`Grid` 的 `Background` 属性可以使用这种语法设置复杂的画笔:
```xml
<Grid x:Name="grid1">
<Grid.Background>
<LinearGradientBrush>
<LinearGradientBrush.GradientStops>
<GradientStop Offset="0.00" Color="Yellow" />
<GradientStop Offset="0.50" Color="White" />
<GradientStop Offset="1.00" Color="Purple" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Grid.Background>
...
</Grid>
```
- **代码等效性**:上述 XAML 标签可以用以下代码实现相同的功能:
```vb
Dim brush As New LinearGradientBrush()
Dim gradientStop1 As New GradientStop()
gradientStop1.Offset = 0
gradientStop1.Color = Colors.Yellow
brush.GradientStops.Add(grad
```
0
0
复制全文
相关推荐









