c# - 从 JavaScript 访问 Silverlight 3.0 应用程序

标签 c# silverlight silverlight-3.0

我正在尝试访问 RootVisual 对象的属性:

<前>[脚本类型] 公共(public)类应用程序信息 { 公共(public)字符串名称{获取;放; } 公共(public)字符串版本{获取;放; } } [脚本类型] 公共(public)部分类 MainPage : UserControl { [脚本化成员] 公共(public)应用程序信息应用程序信息{获取;放; } 公共(public)主页() { 初始化组件(); this.ApplicationInfo = new ApplicationInfo(); this.ApplicationInfo.Name = "我的应用程序"; this.ApplicationInfo.Version = "0.1"; HtmlPage.RegisterScriptableObject("myapp", this); } }

在我的 ASPX 托管页面中,我有以下 JavaScript 代码段:

<script type="text/javascript">
    function onPluginLoaded(plugin) {
        alert('in plugin');
        alert(plugin.Name);  //This gives me the x:Name of the RootVisual object
        var appInfo = plugin.ApplicationInfo;
        alert(appInfo);
        alert(plugin.myapp);
        document.title = appInfo.Name + " " + appInfo.Version;
    }
</script>



<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%" OnPluginLoaded="onPluginLoaded" >
<param name="source" value="ClientBin/SLVersion.xap"/>
<param name="onload" value="onPluginLoaded" />

这行不通。我想知道为什么!提前致谢。

最佳答案

有两件事是错误的。

Silverlight 文档

有关此功能领域的 Silverlight 文档确实相当困惑。事情是这样的,在 onLoad 方法中作为 sender 参数提供的对象并不是文档所说的那样,它不是 silverlight 插件。

至少它不是 HTML DOM/Javascript 所看到的插件。它似乎是某种形式的 Framework 元素的 Javascript API 版本。为了获取对我们有用的插件对象,我们需要调用它的 getHost 方法。

function onPluginLoaded(sender) {
   var plugin = sender.getHost();
}

这让我们更近了一步。

访问已注册的可编程对象

已在 HTMLPage 上注册的可编写脚本的对象可作为插件的 Content 属性的属性进行访问。因此,要访问 ApplicationInfo 对象,您需要:-

function onPluginLoaded(sender) {
   var plugin = sender.getHost();
   var appInfo = plugin.Content.myapp.ApplicationInfo;
   alert(appInfo.Name + " " + appInfo.Version);
}

这会让你继续前进。


ScriptableType

MainPage 中删除 [ScriptableType],在这种情况下,您只想将特定成员标记为可用于脚本,因此您使用 [ScriptableMember].通过使用[ScriptableType],您可以自动将所有公共(public)成员公开为可编写脚本。您在 ApplicationInfo 上正确执行了此操作。

关于c# - 从 JavaScript 访问 Silverlight 3.0 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159525/

相关文章:

c# - 将匿名类型转换为 DataTable

c# - 测试 URL 和查询字符串是否有效

android - Android 设备上的 Silverlight/Moonlight

silverlight - Socket.SendAsync 线程安全有效吗?

c# - Silverlight:在代码隐藏中切换 CustomVisualStateManager 的 VisualStates

c# - Bitmap 的辅助方法和正确处理 C#

c# - 带有字符串键的字典出现 KeyNotFoundException

c# - 如何在 C# 中使用 SaveFileDialog 将字节数组保存为磁盘上的 png 文件?

c# - 如何调用自定义控件中存在的控件事件?

collections - Silverlight 3 DataGrid 分组 - 检测组标题单击或标题展开/折叠