SilverLight浏览器交互之:将SilverLight程序安装在本地

概述

Application.Install 方法
尝试安装应用程序以使该应用程序可以在浏览器外部运行。
此方法只能在用户启动的事件的事件处理程序内工作,并且只有在应用程序清单正确配置为启用浏览器外支持的情况下才能正常工作。
如果不满足这些条件,此方法返回 false,并且安装对话框不会显示。
如果该应用程序需要提升的信任级别,此方法在显示安装对话框之前返回 true。

Application.InstallStateChanged 事件
在 InstallState 属性值更改时发生。

Application.IsRunningOutOfBrowser 属性
获取一个值,该值指示应用程序是否从浏览器外状态启动。

InstallState 枚举
NotInstalled 尚未将该应用程序安装为在浏览器外部运行。
Installing 正在将此应用程序安装为在浏览器外部运行。
Installed 已经将该应用程序安装为在浏览器外部运行。
InstallFailed 不能将此应用程序安装为在浏览器外部运行。

效果

运行程序,因为本地没有安装该SilverLight程序,所以如图。

点击安装程序出现

此时桌面上出现快捷方式。。

双击快捷方式打开程序。。。

运行原来的Web程序出现。。。。

xaml代码:

<Grid x:Name="LayoutRoot" Background="White">
<!--此处为三个Grid
当程序从浏览器运行,且没有安装在本地时,显示IBNotInstalledExperience
当程序从浏览器运行,且已经安装在本地时,显示IBInstalledExperience
当程序从本地运行时,显示OobExperience
-->
<Grid x:Name="IBNotInstalledExperience" Visibility="Collapsed">
<Button x:Name="InstallButton"
Height
="100"
Width
="400"
FontSize
="30"
HorizontalAlignment
="Center"
VerticalAlignment
="Center"
Content
="尚未安装。。。请安装" />
</Grid>

<Grid x:Name="IBInstalledExperience" Visibility="Collapsed">
<Rectangle Fill="Azure"
Stroke
="LightBlue"
RadiusX
="10"
RadiusY
="10"
Margin
="20" />

<TextBlock Text="该程序已经安装在本地."
FontSize
="30"
Margin
="30"
TextWrapping
="Wrap"
HorizontalAlignment
="Center"
VerticalAlignment
="Center" />
</Grid>

<Grid x:Name="OobExperience"
Visibility
="Collapsed">

<Rectangle Fill="Azure"
Stroke
="LightBlue"
RadiusX
="10"
RadiusY
="10"
Margin
="20" />

<TextBlock Text="该程序是从本地打开的"
FontSize
="30"
Margin
="30"
TextWrapping
="Wrap"
HorizontalAlignment
="Center"
VerticalAlignment
="Center" />
</Grid>

</Grid>

cs代码:

public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
//界面初始化事件
Loaded += MainPage_Loaded;
//按钮点击事件
InstallButton.Click += InstClick;
//Application.InstallStateChanged 事件
//在 InstallState 属性值更改时发生。
Application.Current.InstallStateChanged +=OnInstallStateChanged;
}

/// <summary>
/// 更新用户界面
/// </summary>
private void UpdateUserInterface()
{
//Application.IsRunningOutOfBrowser 属性
//获取一个值,该值指示应用程序是否从浏览器外状态启动。
if (Application.Current.IsRunningOutOfBrowser)
{
//如果为浏览器外部启动程序,则页面为OobExperience Grid
OobExperience.Visibility = Visibility.Visible;
IBNotInstalledExperience.Visibility
= Visibility.Collapsed;
IBInstalledExperience.Visibility
= Visibility.Collapsed;
}
else
{
//InstallState 枚举
//NotInstalled 尚未将该应用程序安装为在浏览器外部运行。
//Installing 正在将此应用程序安装为在浏览器外部运行。
//Installed 已经将该应用程序安装为在浏览器外部运行。
//InstallFailed 不能将此应用程序安装为在浏览器外部运行。
if (Application.Current.InstallState == InstallState.Installed)
{
//如果为浏览器启动程序,且已经安装在本地,则页面为IBInstalledExperience Grid
IBInstalledExperience.Visibility = Visibility.Visible;
//隐藏其他Grid
IBNotInstalledExperience.Visibility = Visibility.Collapsed;
OobExperience.Visibility
= Visibility.Collapsed;
}
else
{
//如果为浏览器启动程序,且没有安装在本地,则页面为IBNotInstalledExperience Grid
IBNotInstalledExperience.Visibility = Visibility.Visible;
//隐藏其他的Grid
IBInstalledExperience.Visibility = Visibility.Collapsed;
OobExperience.Visibility
= Visibility.Collapsed;
}
}
}

void OnInstallStateChanged(object sender, EventArgs e)
{
UpdateUserInterface();
}

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
UpdateUserInterface();
}

void InstClick(object sender, RoutedEventArgs e)
{
//Application.Install 方法
//尝试安装应用程序以使该应用程序可以在浏览器外部运行。
//此方法只能在用户启动的事件的事件处理程序内工作,并且只有在应用程序清单正确配置为启用浏览器外支持的情况下才能正常工作。
//如果不满足这些条件,此方法返回 false,并且安装对话框不会显示。
//如果该应用程序需要提升的信任级别,此方法在显示安装对话框之前返回 true。
Application.Current.Install();
}

}

大功告成!!!


作者:记忆逝去的青春
出处:http://www.cnblogs.com/lukun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过http://www.cnblogs.com/lukun/  联系我,非常感谢。

posted on 2011-05-04 16:24  记忆逝去的青春  阅读(2364)  评论(1编辑  收藏  举报