使用Silverlight控件控制ALT键

时间:2013-06-18 20:36:36

标签: c# wpf silverlight internet-explorer

我们正在研究一个项目,该项目调用同时具有桌面客户端和Web客户端相同控件的视图。我们使用WPF和Silverlight来满足这两方面的需求。在具有WPF控件的桌面应用程序上,我们使用“Alt”键修饰符使用鼠标在控件内执行特定任务。我们在Silverlight中实现了相同的功能,现在我们发现Iternet Explorer使用相同的键来显示菜单栏和状态栏......所以,当我们的客户使用Alt-mouse时,基本上我们有这种奇怪的行为。所以,我的问题是,我如何处理IE中的Alt事件,所以它不会发生,但我们自己的事件开始没有首先显示菜单栏? 谢谢!

2 个答案:

答案 0 :(得分:0)

你不能。

键首先由浏览器本身处理,然后传递给Silverlight控件。如此不能改变IE的标准行为,你无法做任何事情。

我看到两个解决方案:

  1. 使用其他密钥。不理想,可能会引起一些混乱,但是您正在运行一个Web应用程序,并且您的用户应该期望它与桌面应用程序的行为不同。
  2. 使您的Silverlight应用程序成为Out of Browser application.。这会在浏览器外部运行应用程序,但仍然在沙箱中,并且会像浏览器中的应用程序一样更新等,但是没有浏览器可以吞下按键,因此您可以像使用Alt键一样使用{{1}}键。用于桌面应用程序。

答案 1 :(得分:0)

你想做的是以下(我不确定这是否会隐藏菜单

  • 捕获Alt键(在JavaScript中确保添加JQuery)
  • 关注Silverlight主机
  • 调用C#方法

捕获alt

<script type="text/javascript">
    var slHost = null;
    $(document).ready(function () {
        slHost = $('#silverlightControlHost'); // Caches Silverlight Host find the div id that holds the silverlight object tag
    });

    $(document).keydown(function (e) {
        if (e.altKey) {
            focus();
            if (slHost)
                slHost.Content.ScriptableObjectNameThatsBelow.MethodNameInClass();
        }
    });  
</script>

从JS <​​/ h3>调用C#
[ScriptableType] //Attribute above class

HtmlPage.RegisterScriptableObject("Name of Class or whatever", this); // Add to constructor

[ScriptableMember] // Attribute above method