在上篇“ ”中,介绍了Silverlight的Out of Browser基础理论知识。本篇将介绍Silverlight的Out of Browser在实例开发前的基础设置以及一些开发技巧。
在创建Silverlight项目时,默认是不支持Out of Browser模式的,所以在使用Silverilght的Out of Browser前,需要对Silverlight项目进行设置,使其支持OOB项目安装和运行。在以下演示中,将创建一个演示例程,该例程将在后续教程中使用,由于该教程不属于Silverilght基础开发教程,所以这里,我不在细述如何创建Silverlight项目,
项目名称: SilverilghtOOBDemo
项目环境:VS2010 + Silverlight 4
Silverlight的Out of Browser应用设置
在Silverlight项目中,设置项目支持Out of Browser模式非常简单,首先右键选中SilverlightOOBDemo客户端项目,选择“Properties”属性
在项目属性栏,默认情况下已经选择了Silverlight标签,而在右边内容页面中,"Enable running application out of the browser"是没有被选中的,我们仅需要选中该选项,保存,即可设置当前Silverlight项目支持Out of Browser。
在"Enable running application out of the browser"选项下,可以看到一个Out-of-Browser Settings...按钮,点击进行该按钮,即可对Out-of-Browser进行设置:
从上图可以看出,开发人员可以通过这些属性,创建个性的Out of Browser应用。以上设置属性是保存在Visual Studio 2010中的OutOfBrowserSettings.xml文件中的,开发人员也可以通过修改该文件来设置OOB应用属性。
1 < OutOfBrowserSettings ShortName ="SilverlightOOBDemo Application" EnableGPUAcceleration ="False" ShowInstallMenuItem ="True" > 2 < OutOfBrowserSettings.Blurb > SilverlightOOBDemo Application on your desktop; at home, at work or on the go. </ OutOfBrowserSettings.Blurb > 3 < OutOfBrowserSettings.WindowSettings > 4 < WindowSettings Title ="SilverlightOOBDemo Application" /> 5 </ OutOfBrowserSettings.WindowSettings > 6 < OutOfBrowserSettings.Icons /> 7 </ OutOfBrowserSettings >
在完成以上设置后,点击确定和保存,该项目即可支持Out of Browser模式。
Silverlight的Out of Browser应用安装
Silverlight Out of Browser应用的安装很简单,作为开发人员我们可以通过两种方式提供给用户安装OOB应用到本地。
第一种方式是使用默认的右键菜单按钮安装应用到本地。
这种方式是Out of Browser默认的安装方式,但是该方式的弊端是不易与用户体验,每次用户要右键点击应用才能安装应用。作为专业Out of Browser应用,通常会使用第二种方式安装OOB应用到本地。
第二种方式,添加控件通过Application.Current.Install()事件安装应用到本地。
在当前应用的MainPage下,添加安装按钮,通过按钮点击事件安装应用到本地。
1 < Grid x:Name ="LayoutRoot" Background ="DimGray" > 2 < Button x:Name ="btInstall" Content ="安装应用到本地" Width ="200" Height ="50" Click ="btInstall_Click" /> 3 </ Grid >
1 private void btInstall_Click( object sender, RoutedEventArgs e) 2 { 3 try 4 { 5 Application.Current.Install(); 6 } 7 catch (InvalidOperationException ex) 8 { 9 MessageBox.Show( " 应用已经安装. " ); 10 } 11 catch (Exception ex) 12 { 13 MessageBox.Show( " 应用不能被安装,错误信息如下: " + Environment.NewLine + ex.Message); 14 } 15 }
通过上面简单代码也可以达到安装OOB应用到本地的效果。
对于较为专业的Out of Browser应用的安装,我们经常会添加一些代码对当前应用安装进行简单的判断,判断该应用是否已经被安装到了本地,如果已经安装,将忽略不再进行安装步骤。这是对OOB应用的一种保护措施。我们简单修改项目代码,
1 public MainPage() 2 { 3 InitializeComponent(); 4 5 if (Application.Current.IsRunningOutOfBrowser) 6 { 7 btInstall.Visibility = Visibility.Collapsed; 8 lbStatus.Text = " 我正在Out of Browser下运行 " ; 9 } 10 else 11 { 12 btInstall.Visibility = Visibility.Visible; 13 lbStatus.Text = " 我正在浏览器中运行 " ; 14 } 15 16 if (Application.Current.InstallState != InstallState.Installed) 17 { 18 btInstall.IsEnabled = true ; 19 20 } 21 else 22 { 23 btInstall.IsEnabled = false ; 24 btInstall.Content = " 应用已经安装到本地 " ; 25 } 26 27 }
安装本地前:
安装本地后:
重复安装时:
对于安装时所处于的状态控制,我们可以通过InstallState进行判断。我们可以通过添加以下代码:
1 private void Current_InstallStateChanged( object sender, System.EventArgs e) 2 { 3 switch (Application.Current.InstallState) 4 { 5 case InstallState.Installing: 6 btInstall.IsEnabled = false ; 7 btInstall.Content = " 正在安装... " ; 8 break ; 9 10 case InstallState.Installed: 11 btInstall.IsEnabled = false ; 12 btInstall.Content = " 已经安装 " ; 13 MessageBox.Show( " OOB应用已经安装到本地 " ); 14 break ; 15 16 case InstallState.NotInstalled: 17 btInstall.IsEnabled = true ; 18 btInstall.Content = " 点击安装该应用到本地 " ; 19 break ; 20 21 case InstallState.InstallFailed: 22 MessageBox.Show( " OOB应用安装失败 " ); 23 btInstall.IsEnabled = false ; 24 break ; 25 } 26 }
当安装时,用户可以看到提示:
以上是Silverlight Out of Browser安装方法和一些控制技巧。
Silverlight的Out of Browser应用卸载
Silverlight的OOB应用卸载同样很简单,Silverlight没有和安装时候的Install API,所以我们无法通过代码的方式控制卸载,但是可以通过以下两种方式卸载应用:
1. 右键点击应用,选择卸载应用选项;
2. 通过Windows“控制面板",选择对应应用进行卸载,这个是传统型卸载方法,这里不再赘述.
简单实例
在这个简单实例中,我将在当前的OOB应用中添加一个简单的网络监测代码,演示该应用在线和离线时的网络状态。在该应用,我们仍旧会使用System.Windows.Application API来判断应用是否离线安装,而我们还会使用System.Net.NetworkInformation API来判断其网络状态。简单修改代码如下:
1 < UserControl x:Class ="SilverlightOOBDemo.MainPage" 2 xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d ="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc ="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 mc:Ignorable ="d" 7 d:DesignHeight ="300" d:DesignWidth ="400" > 8 9 < Grid x:Name ="LayoutRoot" Background ="DimGray" > 10 < StackPanel Orientation ="Vertical" > 11 < Button x:Name ="btInstall" Content ="安装应用到本地" Width ="200" Height ="50" Click ="btInstall_Click" /> 12 < TextBlock x:Name ="lbStatus" Foreground ="White" HorizontalAlignment ="Center" FontSize ="18" /> 13 < TextBlock x:Name ="lbNetworkStatus" Foreground ="LightGreen" HorizontalAlignment ="Center" FontSize ="18" /> 14 </ StackPanel > 15 </ Grid > 16 </ UserControl > 17
1 private void CheckNetworkStatus() 2 { 3 if (NetworkInterface.GetIsNetworkAvailable()) 4 { 5 lbNetworkStatus.Foreground = new SolidColorBrush(Color.FromArgb( 255 , 90 , 240 , 90 )); 6 lbNetworkStatus.Text = " 当前网络处于连接状态 " ; 7 } 8 else 9 { 10 lbNetworkStatus.Foreground = new SolidColorBrush(Colors.Red); 11 lbNetworkStatus.Text = " 当前网络处于断线状态 " ; 12 } 13 } 14 15 private void NetworkChange_NetworkAddressChanged( object sender, EventArgs e) 16 { 17 CheckNetworkStatus(); 18 }
修改构造函数代码:
1 public MainPage() 2 { 3 InitializeComponent(); 4 5 if (Application.Current.IsRunningOutOfBrowser) 6 { 7 btInstall.Visibility = Visibility.Collapsed; 8 lbStatus.Text = " 我正在Out of Browser下运行 " ; 9 } 10 else 11 { 12 btInstall.Visibility = Visibility.Visible; 13 lbStatus.Text = " 我正在浏览器中运行 " ; 14 } 15 16 if (Application.Current.InstallState != InstallState.Installed) 17 { 18 btInstall.IsEnabled = true ; 19 20 } 21 else 22 { 23 btInstall.IsEnabled = false ; 24 btInstall.Content = " 应用已经安装到本地 " ; 25 } 26 27 CheckNetworkStatus(); 28 29 Application.Current.InstallStateChanged += Current_InstallStateChanged; 30 NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged); 31 32 }
运行后可以在离线状态下,查看网络应用状态:
本文主要讲述Silverlight的Out of Browser应用设置,安装和卸载,属于Silverlight实例开发前的基础,下一篇我将继续介绍Silverlight的Out of Browser应用开发基础。
本篇代码下载,请看附件.