来自Javascript的Silverlight键控

来自Javascript的Silverlight键控,silverlight,events,Silverlight,Events,有没有办法从HTML页面onKeyDown事件中监听Silverlight插件的按键?我可以在HTML中加载多个.xap,所有的.xap都应该处理相同的快捷键。您可以通过ScriptableType创建代理,不幸的是,您必须在所有Silverlight应用程序中执行此操作 [ScriptableType] public class KeyPressProxy { public KeyPressProxy() { App.Current.RootVisual.Key

有没有办法从HTML页面onKeyDown事件中监听Silverlight插件的按键?我可以在HTML中加载多个.xap,所有的.xap都应该处理相同的快捷键。

您可以通过
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>

函数onPluginLoaded(){
document.getElementById('silverlightApp1')。content.KeyPressProxy.KeyDown=函数(s,e){
警报(“按下”);
}
}

您可以通过
脚本类型创建代理,不幸的是,您必须在所有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>

函数onPluginLoaded(){
document.getElementById('silverlightApp1')。content.KeyPressProxy.KeyDown=函数(s,e){
警报(“按下”);
}
}

更新为使用onPluginLoaded。更新为使用onPluginLoaded。