如何在Silverlight中附加到ScriptObject上的事件?

时间:2008-12-30 05:11:51

标签: javascript silverlight xaml scripting

HtmlObject提供了为脚本和DOM事件注册托管事件处理程序的所有必要功能,但是如果您需要监听的类不是作为DOM元素存在,而是作为脚本变量(通过ScriptObject引用)而存在?

2 个答案:

答案 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中启用脚本访问:

  1. 用这个标记班级 ScriptableType属性或标记 具体方法有 ScriptableMember
  2. 呼叫 HtmlPage.RegisterScriptableObject in 构造函数。
  3. 一旦在Silverlight代码中设置了所有内容,这就是您在JavaScript中执行的操作:

    1. 获取对JavaScript的引用 对象并注册事件处理程序
    2. 使用document.getElementById获取 Silverlight控件
    3. 在。中调用.Content .. JavaScript事件处理程序。对于 例, silverlight.Content.Page.UpdateText(文本)。
    4. 基本上,所有事件处理都是在JavaScript中执行的,但JavaScript事件处理程序可用于调用Silverlight中的函数。