HtmlObject提供了为脚本和DOM事件注册托管事件处理程序的所有必要功能,但是如果您需要监听的类不是作为DOM元素存在,而是作为脚本变量(通过ScriptObject引用)而存在?
答案 0 :(得分:1)
javascript对象不支持附加事件的概念。但是,它可能支持一个属性的概念,该属性持有函数的引用,如果赋值将在某一点被调用。
我带你有这样一个对象?
如果是这样,您使用ScriptObject SetProperty方法,使用应该保存对函数的引用的属性的名称,并且Managed方法的委托匹配Javascript对象将调用的签名。
警告此时尚未经过测试,但应该让您走上正确的道路。
//Javascript in web page.
var myObj = new Thing();
function Thing()
{
this.doStuff = function()
{
if (this.onstuff) this.onstuff("Hello World");
}
}
// C# code in a Silverlight app.
class SomeClass
{
private ScriptObject myObject;
public SomeClass(ScriptObject theObject)
{
myObject = theObject;
myObject.SetProperty("onstuff", (Action<string>)onstuff);
}
function void onstuff(string message)
{
//Do something with message
}
}
答案 1 :(得分:1)
正如AnthonyWJones所说,Silverlight无法附加到JavaScript事件中。在这种情况下,正确的做法是执行以下操作:
在Silverlight中启用脚本访问:
一旦在Silverlight代码中设置了所有内容,这就是您在JavaScript中执行的操作:
基本上,所有事件处理都是在JavaScript中执行的,但JavaScript事件处理程序可用于调用Silverlight中的函数。