Silverlight应用程序模型全解析
立即解锁
发布时间: 2025-08-13 03:15:54 阅读量: 10 订阅数: 36 

### Silverlight 应用程序模型全解析
#### 1. 应用程序启动流程
Silverlight 应用程序的启动遵循一系列特定步骤:
1. **创建应用程序类实例**:Silverlight 插件会创建自定义应用程序类的实例,该类在 `App.xaml` 和 `App.xaml.vb` 文件中定义。
2. **触发启动事件**:应用程序类的默认构造函数会触发 `Startup` 事件。
3. **创建根视觉对象**:应用程序处理 `Startup` 事件,并为应用程序创建根视觉对象。
从这一点开始,页面代码将接管操作,直到遇到未处理的错误(`UnhandledException`)或最终结束(`Exit`)。以下是这个过程的 mermaid 流程图:
```mermaid
graph LR
A[创建应用程序类实例] --> B[触发启动事件]
B --> C[创建根视觉对象]
C --> D[页面代码接管]
D --> E{是否有未处理错误或结束?}
E -- 是 --> F[处理退出或异常]
E -- 否 --> D
```
#### 2. 附加应用程序事件处理程序
有两种方式可以附加应用程序事件处理程序:
- **使用 `Handles` 关键字**:在 `App.xaml.vb` 文件中声明事件处理方法时使用 `Handles` 关键字。示例代码如下:
```vb
Private Sub Application_Startup(ByVal o As Object, ByVal e As StartupEventArgs) _
Handles Me.Startup
...
End Sub
```
- **添加事件属性到 XAML 标记**:在 XAML 标记中添加事件属性。示例代码如下:
```xml
<Application ... x:Class="SilverlightApplication1.App"
Startup="Application_Startup">
```
#### 3. 应用程序启动默认行为
默认情况下,`Application_Startup` 方法会创建第一个页面,并将其分配给 `Application.RootVisual` 属性,使其成为应用程序的顶级元素和视觉核心。示例代码如下:
```vb
Private Sub Application_Startup(ByVal o As Object, ByVal e As StartupEventArgs) _
Handles Me.Startup
Me.RootVisual = New MainPage()
End Sub
```
需要注意的是,应用程序启动后,`RootVisual` 属性本质上是只读的,不能重新分配。
#### 4. 初始化参数
`Startup` 事件会传入一个 `StartupEventArgs` 对象,其中包含初始化参数。这个机制允许托管 Silverlight 控件的页面传递自定义信息。以下是使用初始化参数的详细步骤:
1. **定义枚举类型**:例如,定义一个 `ViewMode` 枚举,包含 `Customer` 和 `Employee` 两个值。
```vb
Public Enum ViewMode
Customer
Employee
End Enum
```
2. **添加属性到自定义应用程序类**:将 `ViewMode` 存储在自定义应用程序类的属性中。
```vb
Private _viewMode As ViewMode = ViewMode.Customer
Public ReadOnly Property ViewMode() As ViewMode
Get
Return _viewMode
End Get
End Property
```
3. **在 HTML 标记中添加参数**:在 Silverlight 内容区域的标记中添加 `<param>` 元素,设置 `initParams` 参数。
```xml
<div id="silverlightControlHost">
<object data="data:application/x-silverlight,"
type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="TransparentSilverlight.xap"/>
<param name="onerror" value="onSilverlightError" />
<param name="background" value="white" />
<param name="initParams" value="viewMode=Customer" />
...
</object>
<iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
</div>
```
4. **在启动事件处理程序中检索参数**:在 `Application_Startup` 方法中检索并处理参数。
```vb
Private Sub Application_Startup(ByVal o As Object, ByVal e As StartupEventArgs) _
Handles Me.Startup
' 提取视图模式设置,并存储在应用程序属性中。
If e.InitParams.ContainsKey("viewMode") Then
Dim view As String = e.InitParams("viewMode")
If view = "Employee" Then
_viewMode = ViewMode.Employee
End If
End If
' 创建根页面。
Me.RootVisual = New MainPage()
End Sub
```
如果有多个初始化参数,可以用逗号分隔它们。例如:
```xml
<param name="initParams" value="startPage=Page1,viewMode=Customer" />
```
此时,
0
0
复制全文
相关推荐










