【问题标题】:Controlling ALT Key with Silverlight control使用 Silverlight 控件控制 ALT 键
【发布时间】:2013-06-18 20:36:35
【问题描述】:

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

【问题讨论】:

    标签: c# wpf silverlight internet-explorer


    【解决方案1】:

    你不能。

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

    我看到了两种解决方案:

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

    【讨论】:

    • 哎呀,如果绝对没有办法,我想它可能必须是第一个选项。
    【解决方案2】:

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

    • 捕获 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-10
      • 2017-10-14
      • 1970-01-01
      • 2013-02-25
      • 2012-08-12
      • 2021-08-04
      • 2010-11-30
      • 1970-01-01
      相关资源
      最近更新 更多