代码之家  ›  专栏  ›  技术社区  ›  Adrian Anttila

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

  •  3
  • Adrian Anttila  · 技术社区  · 17 年前

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

    2 回复  |  直到 17 年前
        1
  •  1
  •   AnthonyWJones    17 年前

    javascript对象不支持附加事件的概念。但是,它可能支持一个属性的概念,该属性包含对函数的引用,如果指定了函数,将在某个点调用它。

    我想你有这样的东西?

    如果是这样,则使用scriptObject setProperty方法,该方法使用的属性名称应包含对函数的引用,并且托管方法的委托与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
        }
    
    }
    
        2
  •  1
  •   Adrian Anttila    17 年前

    如AnthonyWJones所述,Silverlight不能附加到JavaScript事件。在这种情况下,正确的做法是:

    在Silverlight中启用脚本访问:

    1. 用 scriptabletype属性或标记 具体方法与 可编写脚本的成员
    2. 呼叫 中的htmlpage.registerscriptableobject 建造师。

    在Silverlight代码中设置好所有内容后,您将在javascript中执行以下操作:

    1. 获取对javascript的引用 对象并注册事件处理程序
    2. 使用document.getElementByID获取 Silverlight控件
    3. 呼叫。内容..在 javascript事件处理程序。为了 例子, Silverlight.Content.Page.UpdateText(文本)。

    因此,基本上,所有事件处理都是在javascript中执行的,但是javascript事件处理程序可以用来调用Silverlight中的函数。

    推荐文章