我们现在正在开发一个项目,该项目要求为桌面客户端和 Web 客户端提供相同控件的视图。我们使用 WPF 和 Silverlight 来满足这两种需求。在带有 WPF 控件的桌面应用程序中,我们使用“Alt”键修饰符通过鼠标在控件内执行特定任务。我们在 Silverlight 中实现了相同的功能,现在我们发现 Iternet Explorer 使用相同的键来显示菜单栏和状态栏......所以,当我们的客户使用 Alt 鼠标时,基本上我们会出现这种奇怪的行为。所以,我的问题是,如何处理 IE 中的 Alt 事件,这样它就不会发生,而是我们自己的事件在没有先显示菜单栏的情况下启动?谢谢!
问问题
301 次
2 回答
0
你不能。
键首先由浏览器本身处理,然后传递给 Silverlight 控件。因此,如果不改变 IE 的标准行为,您将无能为力。
我看到两个解决方案:
- 使用不同的密钥。不理想并且可能会引起一些混乱,但是您正在运行一个 Web 应用程序,并且您的用户应该期望它的行为与桌面应用程序不同。
- 使您的 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 回答