【发布时间】:2010-10-08 16:40:46
【问题描述】:
我正在尝试将 KeyDown 事件处理程序添加到 Silverlight SketchFlow 项目中视图的 LayoutRoot,但它似乎没有触发。
如果我将事件类型更改为 MouseLeftButton,则会触发该事件,但我想使用键盘快捷键来演示这一点。
有谁知道如何同时完成这两个任务?
【问题讨论】:
标签: silverlight silverlight-4.0 keydown sketchflow
我正在尝试将 KeyDown 事件处理程序添加到 Silverlight SketchFlow 项目中视图的 LayoutRoot,但它似乎没有触发。
如果我将事件类型更改为 MouseLeftButton,则会触发该事件,但我想使用键盘快捷键来演示这一点。
有谁知道如何同时完成这两个任务?
【问题讨论】:
标签: silverlight silverlight-4.0 keydown sketchflow
好吧,由于某些对不速之客来说并不明显的原因,KeyDown 事件在 XAML 中指定时没有触发。我发现在代码隐藏中挂钩 Application.Current.RootVisual.KeyDown 可以解决问题。
【讨论】:
原因是,当托管在 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 页面中没有该代码,则所有按键都转到浏览器。
【讨论】: