微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我们自己的产品是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 plain copy
  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.     #silverlightControlHost {  
  15.         text-align:center;  
  16.     </style>  
  17.     <script type="text/javascript" src="Silverlight.js"></script>  
  18.     <script type="text/javascript">  
  19.         function onSilverlightError(sender, args) {  
  20.             var appSource = "";  
  21.             if (sender != null && sender != 0) {  
  22.               appSource = sender.getHost().source;  
  23.             }  
  24.               
  25.             var errorType = args.ErrorType;  
  26.             var iErrorCode = args.ErrorCode;  
  27.   
  28.             if (errorType == "ImageError" || errorType == "MediaError") {  
  29.               return;  
  30.             }  
  31.             var errMsg = "Silverlight 应用程序中未处理的错误 " +  appSource + "\n" ;  
  32.             errMsg += "代码: "+ iErrorCode + "    \n";  
  33.             errMsg += "类别: " + errorType + "       \n";  
  34.             errMsg += "消息: " + args.ErrorMessage + "     \n";  
  35. if (errorType == "ParserError") {  
  36.                 errMsg += "文件: " + args.xamlFile + "     \n";  
  37.                 errMsg += "行: " + args.lineNumber + "     \n";  
  38.                 errMsg += "位置: " + args.charPosition + "     \n";  
  39. else if (errorType == "RuntimeError") {             
  40.                 if (args.lineNumber != 0) {  
  41.                     errMsg += "行: " + args.lineNumber + "     \n";  
  42.                     errMsg += "位置: " +  args.charPosition + "     \n";  
  43.                 }  
  44.                 errMsg += "方法名称: " + args.methodName + "     \n";  
  45.             引发新错误(errMsg);  
  46.         }  
  47.     </script>  
  48. </head>  
  49. <body>  
  50.     <form id="form1" runat="server" style="height:100%">  
  51.     <div id="silverlightControlHost">  
  52.         <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">  
  53.           <param name="source" value="ClientBin/TileViewAnimation.xap"/>  
  54.           <param name="onError" value="onSilverlightError" />  
  55.           <param name="background" value="white" />  
  56.           <param name="minRuntimeVersion" value="4.0.50401.0" />  
  57.           <param name="autoUpgrade" value="true" />  
  58.                   <param name="windowless" value="true"/> <!--这句话很重要必须得加-->  
  59.           <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">  
  60.               <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>  
  61.           </a>  
  62.         </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>  
  63.     </form>  
  64. </body>  
  65. </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,...);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐