我正在尝试将 KeyDown 事件处理程序添加到 Silverlight SketchFlow 项目中视图的 LayoutRoot,但它似乎没有触发。
如果我将事件类型更改为 MouseLeftButton,则会触发该事件,但我想使用键盘快捷键来演示这一点。
有谁知道如何实现两者?
我正在尝试将 KeyDown 事件处理程序添加到 Silverlight SketchFlow 项目中视图的 LayoutRoot,但它似乎没有触发。
如果我将事件类型更改为 MouseLeftButton,则会触发该事件,但我想使用键盘快捷键来演示这一点。
有谁知道如何实现两者?
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.
原因是当托管在 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 页面中没有该代码,则所有按键都转到浏览器。