1

我正在尝试将 KeyDown 事件处理程序添加到 Silverlight SketchFlow 项目中视图的 LayoutRoot,但它似乎没有触发。

如果我将事件类型更改为 MouseLeftButton,则会触发该事件,但我想使用键盘快捷键来演示这一点。

有谁知道如何实现两者?

4

2 回答 2

1

Well, for some reasons not obvious to the uninvited, the KeyDown event did not fire when specified in XAML. I found that hooking onto the the Application.Current.RootVisual.KeyDown in code-behind does the trick.

于 2010-10-07T20:53:45.503 回答
0

原因是当托管在 SketchFlow 播放器中时,您的 LayoutRoot 实际上不是“布局根”。键盘焦点最初位于 Sketchflow 播放器上。

您可以尝试在页面加载事件中添加 Focus() 调用,但还要确保您已添加 Jscript 以首先首先关注实际的浏览器 Silverlight 对象。例如

<script type="text/javascript">
        function appLoad(sender, args) {
            var xamlObject = document.getElementById('SilverlightObject');
            if (xamlObject != null)
                xamlObject.focus();
        }

<object id='SilverlightObject' data= ...
            [snip]
            <param name="onError" value="onSilverlightError" />
            <param name="onLoad" value="appLoad" />

如果托管 Silverlight 应用程序的 HTML/ASPX 页面中没有该代码,则所有按键都转到浏览器。

于 2010-10-08T08:40:46.030 回答