silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

     在去年我曾经写过一篇文章,介绍如何在同一页面下多个Silverlight应用间传递事件信息, 当时所使用的技巧就是借助HTML页面元素来传递,当然这种方式也支持向其它第三方ActiveX控 件传递信息。但因为引入了JS代码,让开发者感觉有些别扭。必定这种消息传递写在 CS代码中 会更容易被接受。      好在Silverlight3 beta中提供了两个重要的类,它们都是以“Local

     在去年我曾经写过一篇文章,介绍如何在同一页面下多个Silverlight应用间传递事件信息,
当时所使用的技巧就是借助HTML页面元素来传递,当然这种方式也支持向其它第三方ActiveX控
件传递信息。但因为引入了JS代码,让开发者感觉有些别扭。必定这种消息传递写在 CS代码
更容易被接受。

     好在Silverlight3 beta中提供了两个重要的类,它们都是以“Localmessage”打头,其位于
“System.Windows.messaging”名空间下:

     LocalmessageSender :消息发送器类
     LocalmessageReceiver:消息接收器类
 
     顾名思义,它们就是所谓消息的“发送方”和“接收方”。
   
     而使用它们也很简单,首先我们要先创建一个Silverlight3 Beta项目,名为:Localmessage。
然后将下面的XAML代码复制到MainPage.xaml文件中:

< UserControl  x:Class ="Localmessage.MainPage"
    xmlns
="http://scheR_325_11845@as.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://scheR_325_11845@as.microsoft.com/winfx/2006/xaml"  
    Width
="400"  Height ="200" >
    
< StackPanel  x:Name ="LayoutRoot"  BACkground ="AliceBlue" >
        
< TextBox
            
@H_844_58@margin ="10"
            FontSize
="24"
            x:Name
="txtmessage"   />
        
< Button
            
Content =" 发 送 "
            HorizontalAlignment
="Right"
            Margin
="10"
            Click
="OnSendmessage"   />
        
< TextBlock  textwrapping ="Wrap"
            Foreground
="Blue"
            FontSize
="12"
            x:Name
="txtResponse"
            HorizontalAlignment
="Center"   />
    
</ StackPanel >
</ UserControl >

 

    下面是相应的CS代码:   

void  OnSendmessage( object  sender, routedEventArgs args)
{
    LocalmessageSender msgSender 
=   new  LocalmessageSender( " messageContact " " localhost " );

    EventHandler
< SendCompletedEventArgs >  handler  =   null ;

    handler 
=  (s, E)  =>
      {
          Dispatcher.beginInvoke(() 
=>
          {
              R_325_11845@sgSender.SendCompleted 
-=  handler;

              
if  (e.Error  !=   null )
              {
                  txtResponse.Text 
=  String.Format( " 错误 [{0}] " , e.Error.messagE);
              }
              
else
              {
                  txtResponse.Text 
=  String.Format( " 响应 [{0}] " , e.Response  ==   null   ?   " None "  : e.ResponsE);
              }
          });
      };
    msgSender.SendCompleted 
+=  handler;

    msgSender.SendAsync(txtmessage.Text);
}

    
     在上面代码中,先声明一个 LocalmessageSender对象,因为该类的构造方法被重载,支持两个
方式,相应参数说明如下:

 

    receiverName: 接收器名称,因为发送与接收方必须使用相应的ReceiverName,这一点大家可以
                  想一想我们平时打电话必须拨某一号码才能与某人通信。
                  
    receiverDomain:获取LocalmessageReceiver的域信息(只有指定的域才能获取消息),这主要 
                  是解决跨域和安全性问题


                  
     这里ReceiverDomain还可使用System.Windows.messaging.LocalmessageSender.Global,这样就
设置为Global域了。

     在绑定相应的方法(SendCompleted)之后就可发送异步消息了。
   
   
     @H_127_403@接下来介绍一下接收方代码
   
     首先要先创建一个接收方的Silverlight应用,这里命名为“LocalmessageReceiver”。下面是
相应的XAML代码

< UserControl  x:Class ="LocalmessageReceiver.MainPage"
    xmlns
="http://scheR_325_11845@as.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x
="http://scheR_325_11845@as.microsoft.com/winfx/2006/xaml"  
    Width
="400"  Height ="200" >
    
< Grid  x:Name ="LayoutRoot"  BACkground ="Blue"   >
        
< TextBlock
            
Foreground ="White"
            FontSize
="12"
            x:Name
="txtmessage"
            HorizontalAlignment
="Center"
            VerticalAlignment
="Center" />
    
</ Grid >
</ UserControl >

 

    而CS代码如下所示:
    

void  OnLoaded( object  sender, routedEventArgs args)
{
    List
< String >  allowedSenderDomains  =   new  List < String > ();
    allowedSenderDomains.Add( 
" silverlightshow.net "  );
    allowedSenderDomains.Add( 
" http://www.silverlightshow.net/ "  );
    allowedSenderDomains.Add(
" localhost " );
    
    
// 下面使用全命名主要是项目名称与已有的LocalmessageReceiver重名所致
    System.Windows.messaging.LocalmessageReceiver receiver  =  
        
new  System.Windows.messaging.LocalmessageReceiver( " messageContact " , receiverNameScope.Domain, allowedSenderDomains);

    receiver.messageReceived 
+=  (s, E)  =>
      {
          e.Response 
=   " 接收方收到消息! " ;

          Dispatcher.beginInvoke(() 
=>
            {
                txtmessage.Text 
=  String.Format( " 收到信息 [{0}] " , e.messagE);
            });
      };

    receiver.Listen();
}        

       

    我们看到这里LocalmessageReceiver类实例实始化参数,其中:     

    receiverName:参见上面的LocalmessageSender
    NAMEScope: receiverNameScope.Domain, 该枚举参数用于标识是Domain还是Global。
    AllowedSenderDomains: 允许发送的域信息。

    
    因为之前发送方已指定了域信息,即“localhost”,所以这里在列表变量:allowedSenderDomains
添加了“localhost”,并标识以 ReceiverNameScope.Domain。

    下面我们看一下效果
   

快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息


    
  
     当然如果发送方没有采用与接收方相同的ReceiverName或者发送方的ReceiverDomain未出现在接收
方的AllowedSenderDomains列表中,就会出现错误。这一点大家下载源码后运行一下就可以了。

     另外就是如果发送方设置的是LocalmessageSender.Global,那么在接收方必须相应是:    
      @H_127_403@ReceiverNameScope.Global
    
     这样才能确保信息的传递,源码下载:http://files.cnblogs.com/daizhj/LocalMessage.rar

    
    原文链接:@L_874_51@

    作者: daizhj,代震军

    Tags: silverlight,3 beta,LocalmessageReceiver,LocalmessageSender
   
    网址:
http://daizhj.cnblogs.com/

大佬总结

以上是大佬教程为你收集整理的快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息全部内容,希望文章能够帮你解决快速浏览Silverlight3 Beta: 在多个Silverlight应用间传递信息所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。