在没有接触过多个silverlight应用程序通信之前,我们肯定都觉得这个问题很复杂,其实呢,相当的简单。
下面我将通过几个例子让大家了解一下多个silverlight应用程序之间的通讯怎么样实现,好,之后我们可以用他来做网页中
更有趣的小silverlight功能块并使其看似独立实际交相辉映。
第一种方法。
一提到通讯一定有个监听端和一个发送端
主要的提供的两个类:
LocalMessageReceiver:接受消息
LocalMessageSender: 发送消息
示例如下
监听端:
public MainPage()
{
InitializeComponent();
LocalMessageReceiver Lmr = new LocalMessageReceiver("MyReceiver");
Lmr.MessageReceived += new EventHandler(Lmr_MessageReceived);
Lmr.Listen();
}
//接受到消息的事件方法
void Lmr_MessageReceived(object sender, MessageReceivedEventArgs e)
{
this.textBox1.Text = e.Message;
e.Response = "收到";
}
发送端:
LocalMessageSender Lm = new LocalMessageSender("MyReceiver");
lm.SendAsync(“消息内容”);
还有一点需要注意的
(
1
)在消息发送方,
LocalMessageSender
对象有一个
ReceiverDomain
属性,默认值为
null
,这意味着,
消息的发送方与接收方必须位于同一个域(
Domain
)中
。
什么是域的概念呢,补充一下
“
域(Domain)”和“应用程序域(AppDomain)”不是一回事。域表明了Silverlight应用程序的位置信息,诸如:“www.myuniversity.edu.cn”之类,而应用程序域则代表了Silverlight应用程序的运行环境,Silverlight插件在装载一个Silverlight应用程序时,会为其创建一个应用程序域作为其运行环境。
假设某网页使用多个
如果将发送方的
ReceiverDomain
属性设置为
LocalMessageSender.Global
值(其实就是一个仅包容单个“
*
”字符的字串),则发送方可以向另一个域的
Silverlight
应用程序发送信息。
LocalMessageReceiver Lmr = new LocalMessageReceiver("MyReceiver", ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain);
(2)接收方和发送方的名字一定要一致,才可以接受和发送消息。同一个域的接受对象LocalMessageReceiver不能重名
第二种方法
第二种方法是在一个本地应用程序中用HyperlinkButton控制另一个本地应用程序的Framet跳转 ,这个是我在做两个silverlight应用通讯
时无意中发现的
<
HyperlinkButton
Height
="23"
NavigateUri
="/2"
TargetName
="frame2"
Content
="2"
HorizontalAlignment
="Left"
Width
="50"
/>
另一个应用中的frame这样写
<
sdk:Frame
Source
="/1"
Background
="Tan"
Height
="259"
HorizontalAlignment
="Left"
Name
="frame2"
VerticalAlignment
="Bottom"
Width
="400"
>
< sdk:Frame.UriMapper >
< sdk:UriMapper >
< sdk:UriMapping Uri ="" MappedUri ="/ChildrenPage/Page1.xaml" />
< sdk:UriMapping Uri ="/{pageName}" MappedUri ="/ChildrenPage/Page{pageName}.xaml" />
sdk:UriMapper >
sdk:Frame.UriMapper >
sdk:Frame >
< sdk:Frame.UriMapper >
< sdk:UriMapper >
< sdk:UriMapping Uri ="" MappedUri ="/ChildrenPage/Page1.xaml" />
< sdk:UriMapping Uri ="/{pageName}" MappedUri ="/ChildrenPage/Page{pageName}.xaml" />
sdk:UriMapper >
sdk:Frame.UriMapper >
sdk:Frame >
这样点击HyperlinkButton的时候另一个应用中的frame就可以跳转了。
开始我认为是TargetName属性的缘故 设置成外面Frame的名字找到的目标,其实不是这样。
跳转的路径是从浏览器的地址参数中传过来的