熟悉Silverlight的朋友应该知道,Silverlight从1.0版本到现在的4.0版本,其功能性越来越强大,从下图我们可以看出,Silverlight的应用模型的一个转变过程,从Javascript到现在Trusted应用,我们目睹了Silverlight坎坷的演变过程,尽管现在仍旧存在不足之处,但是有了更多开发人员的支持和帮助,Silverlight一定会更好更强大。

在前几篇中,我们通过简单的实例详细介绍了Silverlight Out of Browser应用开发基础。为了下一篇的实例做准备,本篇,我们将补充介绍一些Silverlight Out of Browser应用开发知识点,
1. 回顾Silverlight Out of Browser存取本地目录API;
2. 学习Silverlight Out of Browser应用Debug调试;
3. 学习Silverlight Out of Browser的消息通知窗口API;
回顾Silverlight Out of Browser存取本地目录API,还记得在前面的文章我们已经介绍,Silverlight提供有现成的API,允许应用在OOB模式下访问My...系列目录,API调用方法很简单,而OOB模式下文件访问,应用可以支持System.IO引用空间中的操作类,例如File类,Directory类,Environment类,等等。

1
private
void
AddMusicToList()
2
{
3
var path
=
Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
4
lsMyMusics.Items.Clear();
5
DirectoryInfo myDirectory
=
new
DirectoryInfo(path);
6
foreach
(FileInfo file
in
myDirectory.EnumerateFiles())
7
{
8
lsMyMusics.Items.Add(file);
9
}
10
}
在下文中,我们将用到Silverlight默认API,读取My Music目录的音乐文件作为默认播放目录。其代码与上相似。
Silverlight Out of Browser应用的调试方法(Debug)
在使用Silverlight开发应用时,Debug是最常用的Visual Studio工具之一。大家可能对Silverlight基于Web浏览器的调试方法并不陌生,终归ASP.NET应用开发调试已经为Silverlight打下了良好的基础。而对于Silverlight的OOB是否通常支持Debug呢?答案是肯定的。
在创建项目时,默认的设置,是支持基于浏览器的应用的Debug。如果需要OOB应用支持脱离浏览器进行Debug,需要按照以下几个步骤设置:
1. 首先需要设置Silverlight客户端应用为“开始项目”,

2. 然后选择客户端应用“Properties”属性栏,设置“Start Action”中的“Installed out-of-browser application”,

3. 点击保存后,重新F5调试应用,即可发现,应用将直接作为OOB模式启动,不再进入Web浏览器中提示用户安装,这时就可以在代码中设置断点进行Debug了。

学习Silverlight Out of Browser的消息通知窗口API(Toast Notifications Windows)
Toast Notifications Windows,又称为Silverlight消息通知窗口,是Silverlight 4的一个新特性,该窗口目前仅限于Out of Browser应用使用。该消息窗口主要是提供临时消息提示,在应用中可以起到让用户注意警示的作用。现在很多Windows应用都喜欢使用该窗口模式显示广告,更新提示等功能。
Silverlight的Notifications Windows目前有以下限制:
1. 窗口最大尺寸限制,最大仅支持宽400,高100的提示窗口;
2. 目前不支持Transparency窗口特效,WPF可以支持;
3. 为了区别其他窗口应用,Notifications Windows无窗口边框;
在明白以上限制后,使用Silverlight API很轻松就能创建一个Toast Notifications窗口。其方法如下:
首先,在SilverlightOOBDemo中创建一个NotificationControl控件,

编辑NotificationControl控件,我们简单的对该控件进行美化,使其看起来更加友好,
1
<
UserControl
x:Class
="SilverlightOOBDemo.NotificationControl"
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
="White"
>
10
<
Border
x:Name
="Frame"
Width
="300"
Height
="100"
Background
="LightYellow"
>
11
<
StackPanel
Orientation
="Vertical"
>
12
<
Border
Width
="290"
Height
="24"
CornerRadius
="4"
Margin
="2,4,2,4"
>
13
<
Border.Background
>
14
<
LinearGradientBrush
StartPoint
="0.5,0.0"
15
EndPoint
="0.5,1.0"
>
16
<
GradientStop
Offset
="0.2"
Color
="#FF1C68A0"
/>
17
<
GradientStop
Offset
="1.0"
Color
="#FF54A7E2"
/>
18
</
LinearGradientBrush
>
19
</
Border.Background
>
20
<
Border.Effect
>
21
<
DropShadowEffect
BlurRadius
="4"
ShadowDepth
="4"
22
Opacity
="0.4"
/>
23
</
Border.Effect
>
24
<
TextBlock
Text
="友情提示"
FontSize
="12"
25
FontWeight
="Bold"
Foreground
="White"
Margin
="4"
/>
26
</
Border
>
27
<
StackPanel
Orientation
="Horizontal"
>
28
<
Image
Source
="/SilverlightOOBDemo;component/Images/Update.png"
Width
="48"
Height
="48"
29
Stretch
="Fill"
Margin
="4"
VerticalAlignment
="Top"
/>
30
<
TextBlock
Width
="240"
Text
="检测到新的音乐文件,已经更新到播放列表。小广告:我的博客http://jv9.cnblogs.com"
31
FontSize
="11"
Foreground
="#FF202020"
TextWrapping
="Wrap"
32
Margin
="4"
/>
33
</
StackPanel
>
34
</
StackPanel
>
35
</
Border
>
36
</
Grid
>
37
</
UserControl
>
38
然后回到OutofBrowserMainPage页面,这里,我们在“关于”按钮上,添加Click事件响应,使其被点击后,弹出Notifications窗口。

首先创建notifyWindow实例,
1
#region
Private Members
2
Window OOBWindow
=
Application.Current.MainWindow;
3
NotificationWindow notifyWindow
=
null
;
4
#endregion
5
6
#region
Constructor
7
public
OutofBrowserMainPage()
8
{
9
InitializeComponent();
10
notifyWindow
=
new
NotificationWindow();
11
12
13
}
14
#endregion
然后在Click事件中进行窗口激活:
1
private
void
aboutBtn_Click(
object
sender, RoutedEventArgs e)
2
{
3
if
(
null
==
notifyWindow)
4
MessageBox.Show(
"
通告窗口仅能运行在OOB模式下,请安装Silverlight应用到本地。
"
);
5
6
if
(
true
==
App.Current.IsRunningOutOfBrowser)
7
{
8
if
(notifyWindow.Visibility
==
Visibility.Visible)
9
notifyWindow.Close();
10
11
NotificationControl myNotify
=
new
NotificationControl();
12
notifyWindow.Width
=
300
;
13
notifyWindow.Height
=
100
;
14
notifyWindow.Content
=
myNotify;
15
notifyWindow.Show(
10000
);
16
}
17
18
}
在上面代码中,我们创建了一个新的Notification窗口实例,然后使用Show(毫秒),使其显示在客户端,最终显示效果如下:

今天的内容暂时到这里了,下一篇,我们将综合使用这些Silverlight OOB应用开发技巧实现一个完整应用实例, Silverlight Out of Browser音乐播放器。
本篇源代码下载
欢迎大家加入"专注Silverlight" 技术讨论群:
32679955(六群)
23413513(五群)
32679922(四群)
100844510(三群)
37891947(二群)
22308706(一群)