#silverlight #events
#silverlight #Мероприятия
Вопрос:
Есть какой-либо способ прослушивания нажатых клавиш плагином Silverlight из события onKeyDown на HTML-странице? У меня может быть загружено несколько .xap в моем HTML, и все .xaps должны обрабатывать одни и те же сочетания клавиш.
Ответ №1:
Вы можете создать прокси через ScriptableType
, к сожалению, вам приходится делать это во всех ваших приложениях Silverlight.
[ScriptableType]
public class KeyPressProxy
{
public KeyPressProxy()
{
App.Current.RootVisual.KeyDown = (s, e) => KeyDown(s, e);
}
[ScriptableMember]
public event KeyEventHandler KeyDown = delegate { };
}
Затем вам нужно зарегистрировать объект, но обязательно сделайте это после создания корневого изображения:
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>
Комментарии:
1. Обновлено для использования вместо onPluginLoaded.