SilverLight中如何跟ActiveX控件交互使用

来源:互联网 发布:淘宝怎么看买家评星 编辑:程序博客网 时间:2024/06/06 09:08

我们自己的产品是ActiveX控件的方式,最近需要用到silverlight开发嵌入activeX,查了资料估计也就只有两个办法了:

办法一: Silverlight中调用页面,页面中放置activeX控件.


下载第三方控件的dll,这里提供一个下载地址:

http://download.csdn.net/source/3231944


下面是这个工具的的介绍:Silverlight

下面是配置步骤:

1):将下载资源中的dll(Divelements.SilverlightTools.dll ),添加到Silverlight项目的引用中去。


2):在工具箱上右键 ,选择“选择项”,然后浏览到上面那个dll文件所在的位置,点击添加即可。


3):将刚才新添加的组件拖到silverlight编辑页面中,这时自动添加了对命名空间的引用

xmlns:divtools="clr-namespace:Divelements.SilverlightTools;assembly=Divelements.SilverlightTools"


4):在要嵌入的位置加入HtmlHost组件,例如:

<Grid>

       <divtools:HtmlHost x:Name="htmlPlaceholderHost1"  SourceUri="http://www.baidu.com" Margin="-4,21,-1,0"/>

</Grid>

这个控件的SourceUri属性即是指向你的其他页面信息,只要给一个Uri地址即可。


5):最后不要忘了在silverlight 的宿主页,加上 <param name="Windowless" value ="true" />,否则会弹出窗口报错“You must be using the Silverlight plugin in windowless mode to use this control.”,示例如下:


[csharp] view plaincopy
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml" >  
  3.   
  4. <head>  
  5.     <title>TileViewAnimation</title>  
  6.     <style type="text/css">  
  7.     html, body {  
  8.         height: 100%;  
  9.         overflow: auto;  
  10.     }  
  11.     body {  
  12.         padding: 0;  
  13.         margin: 0;  
  14.     }  
  15.     #silverlightControlHost {  
  16.         height: 100%;  
  17.         text-align:center;  
  18.     }  
  19.     </style>  
  20.     <script type="text/javascript" src="Silverlight.js"></script>  
  21.     <script type="text/javascript">  
  22.         function onSilverlightError(sender, args) {  
  23.             var appSource = "";  
  24.             if (sender != null && sender != 0) {  
  25.               appSource = sender.getHost().Source;  
  26.             }  
  27.               
  28.             var errorType = args.ErrorType;  
  29.             var iErrorCode = args.ErrorCode;  
  30.   
  31.             if (errorType == "ImageError" || errorType == "MediaError") {  
  32.               return;  
  33.             }  
  34.   
  35.             var errMsg = "Silverlight 应用程序中未处理的错误 " +  appSource + "\n" ;  
  36.   
  37.             errMsg += "代码: "+ iErrorCode + "    \n";  
  38.             errMsg += "类别: " + errorType + "       \n";  
  39.             errMsg += "消息: " + args.ErrorMessage + "     \n";  
  40.   
  41.             if (errorType == "ParserError") {  
  42.                 errMsg += "文件: " + args.xamlFile + "     \n";  
  43.                 errMsg += "行: " + args.lineNumber + "     \n";  
  44.                 errMsg += "位置: " + args.charPosition + "     \n";  
  45.             }  
  46.             else if (errorType == "RuntimeError") {             
  47.                 if (args.lineNumber != 0) {  
  48.                     errMsg += "行: " + args.lineNumber + "     \n";  
  49.                     errMsg += "位置: " +  args.charPosition + "     \n";  
  50.                 }  
  51.                 errMsg += "方法名称: " + args.methodName + "     \n";  
  52.             }  
  53.   
  54.             引发新错误(errMsg);  
  55.         }  
  56.     </script>  
  57. </head>  
  58. <body>  
  59.     <form id="form1" runat="server" style="height:100%">  
  60.     <div id="silverlightControlHost">  
  61.         <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">  
  62.           <param name="source" value="ClientBin/TileViewAnimation.xap"/>  
  63.           <param name="onError" value="onSilverlightError" />  
  64.           <param name="background" value="white" />  
  65.           <param name="minRuntimeVersion" value="4.0.50401.0" />  
  66.           <param name="autoUpgrade" value="true" />  
  67.                   <param name="windowless" value="true"/> <!--这句话很重要必须得加-->  
  68.           <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">  
  69.               <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>  
  70.           </a>  
  71.         </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>  
  72.     </form>  
  73. </body>  
  74. </html>  
方法二:Silverlight和ActiveX通过html页面js脚本进行交互

   JS调用SilverLight中函数:
   首先在SilverLight的cs,页面初始化时注册一个JS脚本对像,使JS能够找到它。
   //注册JS脚本对象
   HtmlPage.RegisterScriptableObject("脚本对象名称", this); 
   然后在SilverLight的cs中写一个供JS调用的函数如下:
   [ScriptableMember] //注意这一句必须加,否则JS会找不到此函数
   //函数在定义时用关键字Public
   public void func_Test(string aValue)
   {
       ShowMessage(aValue);
   }
 最后一步在JS中调用Silverlight中的函数,如下:
   //注意SL是SilverLight在html页面中ID名称。
   //引处先找到SilverLight对象,然后在获取我们刚才注册的【脚本对象名称】。
   var obj = document.getElementById("SL").content.脚本对象名称; //获取登录脚本对象
        if (obj != null)
        {
            obj.Func_Tets("成功了"); //调用SilverLight中函数。
        }
 
在SilverLight中调用JS中的函数:这个就比较简单了
   HtmlPage.Window.Invoke("函数名",参数1,参数2,...);

0 0
原创粉丝点击