深入探索Silverlight高级特性
立即解锁
发布时间: 2025-08-25 01:57:36 阅读量: 2 订阅数: 13 

### 深入探索Silverlight高级特性
#### 1. 受信任的浏览器外应用程序
在浏览器外运行Silverlight应用程序时,默认情况下它是处于沙盒环境中的部分受信任应用,存在一些限制。若想访问浏览器外模式下的特殊功能,就需要让应用程序获得提升的信任权限。
要在安装浏览器外应用程序时请求提升权限,需在`OutOfBrowserSettings.xml`文件中设置`SecuritySettings`,并将`ElevatedPermissions`属性设为`Required`。可以在浏览器外设置窗口中选择“在浏览器外运行时需要提升的信任权限”选项来完成此设置,这会在`OutOfBrowserSettings.xml`文件中添加如下代码:
```xml
<OutOfBrowserSettings.SecuritySettings>
<SecuritySettings ElevatedPermissions="Required" />
</OutOfBrowserSettings.SecuritySettings>
```
当应用程序变为受信任状态后,安装提示会发生变化。
受信任的浏览器外应用程序可访问的特殊功能包括:
- Silverlight浏览器外窗口操作
- 无需策略文件检查的跨域网络访问
- 从打开/保存文件对话框获取完整文件路径
- 访问用户文件夹(如文档和图片文件夹)
- COM互操作性
#### 2. 自定义浏览器外应用程序
从Silverlight 3开始,浏览器外应用程序模型就尽可能地模拟桌面应用程序的特性。Silverlight 3引入了可为应用程序快捷方式提供自定义图标的功能,而Silverlight 4则新增了一组API,可通过编程方式调整浏览器外窗口的大小并控制其在屏幕上的位置。对于受信任的浏览器外应用程序,还能选择不同的窗口样式。
##### 2.1 自定义图标
可通过在`OutofBrowserSettings.xml`文件的`<OutOfBrowserSettings.Icons>`节点中添加`<Icon/>`标签,并添加适当大小的`<Icon>`节点,来更改安装窗口、浏览器外应用程序窗口、桌面和开始菜单图标的默认图标。可使用`16x16`、`32x32`、`48x48`和`128x128`这些尺寸的图标以覆盖所有可能的情况。也可在浏览器外设置窗口中设置自定义图标。
示例代码如下:
```xml
<OutOfBrowserSettings.Icons>
<Icon Size="16,16">Assets/icons/16x.png</Icon>
<Icon Size="32,32">Assets/icons/32x.png</Icon>
<Icon Size="48,48">Assets/icons/64x.png</Icon>
<Icon Size="128,128">Assets/icons/128x.png</Icon>
</OutOfBrowserSettings.Icons>
```
为确保应用程序能正常安装和运行,需注意以下三点:
- 图标文件必须为PNG格式。
- 添加的图标文件的`BuildAction`属性必须设置为`Content`。
- 必须正确添加所有四种尺寸的图标文件,不能有缺失,否则安装过程将失败。
##### 2.2 窗口操作和自定义
Silverlight 4中的新窗口API允许通过编程方式控制浏览器外窗口的顶部和左侧位置,将其置于前台(若未激活),检查窗口是否置顶,并定义其宽度和高度,从而在运行时修改浏览器外应用程序窗口。例如,还可处理`Closing`事件(除计算机关机或用户注销时外可取消该事件),此事件可用于执行一些操作,如显示用户在应用程序数据中有未保存更改的警告。
这些功能通过应用程序的`MainWindow`对象提供,如下代码展示了自定义关闭按钮的实现:
```csharp
if (Application.Current.IsRunningOutOfBrowser)
{
Application.Current.MainWindow.Close();
}
```
拖动和移动窗口的相关代码如下:
```csharp
bool isDragging = false;
private void MainPage_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (Application.Current.IsRunningOutOfBrowser && !isDragging)
isDragging = true;
}
private void MainPage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (Application.Current.IsRunningOutOfBrowser && isDragging)
isDragging = false;
}
private void MainPage_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging)
Application.Current.MainWindow.DragMove();
}
```
受信任的应用程序可隐藏浏览器外应用程序窗口的标题栏和边框,以提供完全自定义的用户界面。要应用窗口样式,需在浏览器外设置窗口的“窗口样式”下拉列表中选择样式。若选择“无边框”或“无边框圆角”选项,将失去标题栏以及默认的最小化、最大化和关闭按钮,还有默认的拖动/移动行为,此时需要为应用程序提供自定义按钮和拖动/移动行为。
#### 3. 使用网络和离线API
将网络API和离线API集成到示例应用程序中,可按以下步骤操作:
1. 从XAML代码中移除名为`ApplicationNameTextBlock`的`TextBlock`,并添加以下代码以显示应用程序的连接状态(已连接/断开连接)和运行模式(在浏览器内/浏览器外):
```xml
<StackPanel>
<TextBlock FontWeight="Bold" Foreground="White">
Connectivity Status</TextBlock>
<TextBlock x:Name="txtNWStatus" FontSize="14">
</TextBlock>
</StackPanel>
<StackPanel Margin="15,0,0,0">
<TextBlock FontWeight="Bold" Foreground="White">
Application Mode</TextBlock>
<TextBlock x:Name="txtAppMode" FontSize="14">
</TextBlock>
</StackPanel>
```
2. 在`MainPage.xaml`代码隐藏类中添加`System.Net.NetworkInformation`命名空间:
```csharp
using System.Net.NetworkInformation;
```
3. 创建一个私有方法`UpdateNetworkConnectivityStatus`来获取网络连接状态,并更新状态`TextBlock`的文本属性和前景色:
```csharp
private void UpdateNetworkConnectivityStatus()
{
if (NetworkInterface.GetIsNetworkAvailable())
{
txtNWStatus.Text = "Connected";
txtNWStatus.Foreground = new SolidColorBrush(Colors.Cyan);
}
else
{
txtNWStatus.Text = "Disconnected";
txtNWStatus.Foreground = new SolidColorBrush(Colors.Red);
}
}
```
4. 在`MainPage`构造函数中添加`Loaded`和`NetworkAddressChange`事件处理程序:
```csharp
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged);
```
5. 定义两个事件处理程序,并调用`UpdateNetworkConnectivityStatus`方法:
```csharp
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
UpdateNetworkConnectivityStatus();
}
void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{
UpdateNetworkConnectivityStatus();
}
```
6. 保存、构建并运行应用程序,就能看到应用程序启动时的连接或断开状态,且在运行过程中网络连接状态发生变化时,应用程序会自动更新状态。
还可使用`ApplicationServiceContext.IsRunningOutOfBrowser`属性更新应用程序的运行状态。添加一个新的`UpdateApplicationModeStatus`方法:
```csharp
private void UpdateApplicationModeStatus()
{
if (App.Current.IsRunningOutOfBrowser)
{
txtAppMode.Text = "Out of Browser";
txtAppMode.Foreground = new SolidColorBrush(Colors.Yellow);
}
else
{
txtAppMode.Text = "In Browser";
```
0
0
复制全文
相关推荐










