稳扎稳打Silverlight(44) - 4.0浏览器外运行(Out Of Browser)之OOB的增强及其新增的NotificationWindow
介绍
Silverlight 4.0 OOB 模式的新特性:
* 新增了 Closing 事件
* 实现程序在 OOB 模式下的自动更新
* NotificationWindow - 在 OOB 模式下显示通知窗口,也就是 toast
* 实现自定义的 NotificationWindow
在线DEMO
http://www.cnblogs.com/webabcd/archive/2010/08/09/1795417.html
示例
1、OOB(Out Of Browser)模式的复习,以及其新增的 Closing 事件
Demo.xaml
代码
<navigation:Page x:Class="Silverlight40.OutOfBrowser.Demo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
Title="Other Page">
<Grid x:Name="LayoutRoot">
<StackPanel HorizontalAlignment="Left">
<Button Name="btnOutOfBrowser" Margin="50" Click="btnOutOfBrowser_Click" />
<Button Name="btnClose" Margin="50" Content="关闭" Click="btnClose_Click" />
<TextBlock Text="OOB 模式下网络状况的检测,以及程序的升级详见本目录下的 AutoUpdateDemo.xaml" Margin="5" />
<TextBlock Text="OOB 模式的 toast(以及与 Popup 的对比)详见本目录下的 NotificationWindowDemo.xaml" Margin="5" />
<TextBlock Text="OOB 模式下自定义 NotificationWindow 的内容及样式详见本目录下的 CustomNotificationWindowDemo.xaml" Margin="5" />
</StackPanel>
</Grid>
</navigation:Page>
Demo.xaml.cs
代码
/*
* Silverlight 3.0 时代具有如下特性
* Application.InstallStateChanged - 浏览器外运行的相关状态发生改变时所触发的事件
* Application.InstallState - 浏览器外运行的相关状态 [System.Windows.InstallState 枚举]
* NotInstalled - 在浏览器中运行
* Installing - 安装到桌面中
* Installed - 在浏览器外运行
* InstallFailed - 安装到桌面的过程中发生错误
* Application.IsRunningOutOfBrowser - 当前程序是否是从浏览器外启动的
* Application.Install() - 安装 Silverlight 程序到浏览器外(卸载只能通过右键菜单的方式卸载)
* Application.CheckAndDownloadUpdateAsync, Application.CheckAndDownloadUpdateCompleted - 一对异步方法/事件,用于更新浏览器外运行的 Silverlight 程序(从服务器上下载新的版本)
*
* 启用 OOB:在 Silverlight 项目上单击右键 -> 属性 -> Silverlight -> 选中 Enable running application out of the browser
* 配置 OOB:在 Silverlight 项目上单击右键 -> 属性 -> Silverlight -> Out-of- Browser Settings 可以对“浏览器外运行”的相关参数做设置(也可以手动修改 Properties/OutOfBrowserSettings.xml)
*/
/*
* 调试 OOB 模式下的 Silverlight 程序:启用 OOB 模式,将 Silverlight 项目设置为启动项目,然后运行即可
*/
/*
* 本例用于演示 Closing 事件
* Application.Current.MainWindow - OOB 模式下的应用程序窗口。属性值为 System.Windows.Window 类型
* Window.Activate() - 激活窗口,使之具有焦点,并置于最前面
* Window.IsActive - 是否为激活窗口(仅 get)
* Window.Close() - 关闭窗口
* Window.Closing - 窗口关闭前触发的事件。事件参数为 System.ComponentModel.ClosingEventArgs 类型
* ClosingEventArgs.IsCancelable - 是否可以取消窗口的关闭事件
* ClosingEventArgs.Cancel - 是否取消窗口的关闭事件
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;
namespace Silverlight40.OutOfBrowser
{
public partial class Demo : Page
{
public Demo()
{
InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (App.Current.IsRunningOutOfBrowser)
btnOutOfBrowser.Content = "卸载";
else
btnOutOfBrowser.Content = "安装";
Init();
}
private void btnOutOfBrowser_Click(object sender, RoutedEventArgs e)
{
if (!App.Current.IsRunningOutOfBrowser && App.Current.InstallState == InstallState.NotInstalled)
App.Current.Install();
else
MessageBox.Show("已经安装,使用右键卸载");
}
void Init()
{
if (Application.Current.IsRunningOutOfBrowser)
Application.Current.MainWindow.Closing += new EventHandler<System.ComponentModel.ClosingEventArgs>(MainWindow_Closing);
}
void MainWindow_Closing(object sender, System.ComponentModel.ClosingEventArgs e)
{
if (MessageBox.Show("确认关闭吗?", "确认", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
}
else
{
if (e.IsCancelable)
e.Cancel = true;
}
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
if (Application.Current.IsRunningOutOfBrowser)
Application.Current.MainWindow.Close();
}
}
}