Silverlight KeyDowns от Javascript - PullRequest
       2

Silverlight KeyDowns от Javascript

1 голос
/ 26 апреля 2011

Есть ли способ прослушать нажатие клавиш плагина Silverlight со страницы HTML на событиеKeyDown?У меня может быть несколько .xap, загруженных в мой HTML, и все .xaps должны обрабатывать одни и те же сочетания клавиш.

1 Ответ

1 голос
/ 26 апреля 2011

Вы можете создать прокси через ScriptableType, к сожалению, вы должны сделать это во всех ваших приложениях Silverlight.

[ScriptableType]
public class KeyPressProxy
{
    public KeyPressProxy()
    {
        App.Current.RootVisual.KeyDown += (s, e) => KeyDown(s, e);
    }

    [ScriptableMember]
    public event KeyEventHandler KeyDown = delegate { };
}

Затем вы должны зарегистрировать объект, но убедитесь, что вы делаете это после того, какRootVisual был создан:

private void Application_Startup(object sender, StartupEventArgs e)
{
    this.RootVisual = new MainPage();

    var proxy = new KeyPressProxy();
    HtmlPage.RegisterScriptableObject("KeyPressProxy", proxy);
}

Наконец, вы можете добавить обработчик в свой JavaScript:

<div id="silverlightControlHost">
    <object id="silverlightApp1" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="onLoad" value="onPluginLoaded" />
        <!-- ... -->
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
</div>
<script type="text/javascript">
    function onPluginLoaded() {
        document.getElementById('silverlightApp1').content.KeyPressProxy.KeyDown = function (s, e) {
            alert('pressed');
        }
    }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...