0

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

4

2 回答 2

0

你不能。

键首先由浏览器本身处理,然后传递给 Silverlight 控件。因此,如果不改变 IE 的标准行为,您将无能为力。

我看到两个解决方案:

  1. 使用不同的密钥。不理想并且可能会引起一些混乱,但是您正在运行一个 Web 应用程序,并且您的用户应该期望它的行为与桌面应用程序不同。
  2. 使您的 Silverlight 应用程序成为Out of Browser 应用程序。. 这会在浏览器之外运行应用程序,但仍然在沙箱中,并且会像浏览器内的应用程序一样进行更新等,但是没有浏览器可以吞下按键,因此您可以像使用Alt桌面应用程序一样使用按键。
于 2013-06-18T20:42:10.293 回答
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 调用 C#

[ScriptableType] //Attribute above class

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

[ScriptableMember] // Attribute above method
于 2013-06-18T21:24:08.233 回答