Javascript, вызывающий функцию C # под Silverlight - PullRequest
1 голос
/ 24 февраля 2009

У меня есть приложение Silverlight, использующее C #, с двумя основными функциями, которые я хочу сделать доступными из функций JavaScript. Я сделал RegisterScriptableObject () в классе и настроил [ScriptableMember] для функций, к которым я хочу получить доступ.

Это объект Silverlight:

<div id="silverlightControlHost">
    <object id="silverlightControl" data="data:application/x-silverlight," type="application/x-silverlight-2" width="1024px" height="300px">
        <param name="source" value="DrawingWaveForm.xap"/>
        <param name="onerror" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="2.0.31005.0" />
        <param name="autoUpgrade" value="true" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
            <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
        </a>
    </object>
    <iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
</div>

и это мои функции JavaScript:

    function Start()
    {
        var control = document.getElementById("silverlightControl");            
        control.Content.Page.Start();
    }

    function Stop()
    {
        var control = document.getElementById("silverlightControl");            
        control.Content.Page.Stop();
    } 

Может кто-нибудь сказать мне, где я иду не так, как кажется, не работает

Ответы [ 4 ]

2 голосов
/ 24 февраля 2009

Как сказал Тимхойер, [Scriptable] в ваших методах Silverlight.

Назовите это в своем классе:

HtmlPage.RegisterScriptableObject("Page", this);  

Вызовите методы Silverlight, помеченные как Scriptable, из вашего javascript следующим образом:

function CenterMap(latitude, longitude)
{
     var silvercontrol = document.getElementById("ctl00_cphMain_slControl");
     if (silvercontrol)
     silvercontrol.Content.Page.CenterOnCoordinates(latitude, longitude);
}

Эта страница показывает вам это и как сделать обратное, вызывая методы javascript из Silverlight. Это действительно хорошая модель.

1 голос
/ 24 февраля 2009

Вы должны убедиться, что ваши функции C # помечены как Scriptable. Смотрите http://silverlight.net/learn/learnvideo.aspx?video=65683, чтобы узнать, как этого добиться.

0 голосов
/ 23 декабря 2009

Я просто пытался решить эту проблему сам. Первая функция js работает, но все остальное выдает эту ошибку. Повозившись, я заметил, что изменение базовой функции C #, которая работала успешно, не оказало никакого влияния - браузер работал с кэшированной версией элемента управления Silverlight. Попробуйте очистить кеш вашего браузера.

0 голосов
/ 24 февраля 2009

Это всего лишь мысль, но вам, возможно, нужно сделать методы публичными (они, кажется, не в вашем коде)?

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