C# 从Silverlight覆盖(IE7)浏览器键盘处理

C# 从Silverlight覆盖(IE7)浏览器键盘处理,c#,javascript,silverlight,internet-explorer,internet-explorer-7,C#,Javascript,Silverlight,Internet Explorer,Internet Explorer 7,当我在Firefox中测试我的Silverlight 2应用程序时,当Silverlight具有焦点时,我通过Page.KeyDown事件接收每个按键都没有问题 当我在InternetExplorer7中测试它时,我只能得到浏览器尚未处理的键盘事件。但是,我可以在javascript中重写这些相同的键盘事件 例如,Ctrl+D。我可以在javascript中通过执行以下操作来覆盖它,但在Silverlight中我不能做同样的事情 function initKeyHandling(){ docum

当我在Firefox中测试我的Silverlight 2应用程序时,当Silverlight具有焦点时,我通过Page.KeyDown事件接收每个按键都没有问题

当我在InternetExplorer7中测试它时,我只能得到浏览器尚未处理的键盘事件。但是,我可以在javascript中重写这些相同的键盘事件

例如,Ctrl+D。我可以在javascript中通过执行以下操作来覆盖它,但在Silverlight中我不能做同样的事情

function initKeyHandling(){ document.attachEvent("onkeydown", keydown); }

function keydown(e) { printToTextbox('Keydown ', e); return false; }

...

initKeyHandling();

此外,我将事件从Javascript转发到Silverlight的尝试也失败了。当Silverlight拥有focus时,我的javascript键盘事件处理程序甚至从未被触发。

我们在使用Flash时遇到过类似的问题,我们必须在同一页面上使用一个单独的DIV标记来解决这些问题,我们必须在需要调用键盘快捷键时通过编程将焦点设置到该页面上。

从文档中看,这似乎是不可能的(至少没有您提到的javascript解决方案):

键盘事件和浏览器 不同的浏览器可能会处理 键盘事件不同。当你 创建一个使用 键盘输入,确保测试 目标浏览器中的应用程序

浏览器决定了哪一个 它解释为命令的击键 以及它传递给哪些按键 托管内容。这意味着 无法检索某些击键 来自KeyDown和KeyUp事件处理程序 功能。大多数击键都是 浏览器解释为命令是 快捷键或快捷键, 和未作为关键事件传递给 Silverlight。例如,CTRL+D是一个 快捷键组合 将收藏夹URL添加到Firefox 和Internet Explorer浏览器,以及 CTRL和D都不报告为a 关键事件

看看:

我想前几天我读到了一篇关于底层HTML文本框的文章。但我不确定它是否仍然支持,或者细节是什么。如果我再找到它,我会回来的


/Asger

如果我的用户可以在任何时候按键盘快捷键,我就必须始终关注DIV,对吗?听起来很疯狂!问题是Silverlight插件在我的应用程序中始终是焦点,如果我们一直将焦点设置为隐藏的div标记,那么用户就不能使用我的Silverlight KeyDown/Up事件中定义的任何快捷方式,除非我们将JavaScript KeyDown/Up事件传递给Silverlight,然后在Silverlight中处理它们。