Как вы прикрепляете к событиям на ScriptObject в Silverlight? - PullRequest
3 голосов
/ 30 декабря 2008

HtmlObject предоставляет все необходимые функции для регистрации обработчиков управляемых событий для событий сценария и DOM, но что делать, если класс, который необходимо прослушивать, не существует как элемент DOM, а является переменной сценария (на которую ссылается ScriptObject) ?

Ответы [ 2 ]

1 голос
/ 15 июня 2009

Как заявляет AnthonyWJones, Silverlight не может быть присоединен к событиям JavaScript. В этой ситуации нужно сделать следующее:

Включить доступ к сценариям в Silverlight:

  1. Отметьте класс с помощью Атрибут ScriptableType или отметка конкретные методы с ScriptableMember
  2. Вызов HtmlPage.RegisterScriptableObject in конструктор.

Как только все настроено в коде Silverlight, вот что вы делаете в JavaScript:

  1. Получить ссылку на JavaScript объект и зарегистрировать обработчик события
  2. Используйте document.getElementById, чтобы получить элемент управления Silverlight
  3. Звоните. Содержание .. в Обработчик событий JavaScript. За пример, silverlight.Content.Page.UpdateText (текст).

Таким образом, вся обработка событий выполняется в JavaScript, но обработчики событий JavaScript можно использовать для вызова функций в Silverlight.

1 голос
/ 30 декабря 2008

Объект 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
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...