我一直试图在我的Silverlight应用程序来处理用户控件(页)的KeyDown事件,但似乎是对Silverlight的用户输入功能的一部分一些奇怪的行为。本次活动是没有得到任何情况下提出的。我甚至试图连接的事件处理程序的用户控件中的每个容器的控制,但仍然没有运气。事实上,Silverlight的用户输入“事件路由”系统是相当新颖,似乎很奇怪,我,也许这只是我的一个误解,虽然我宁愿无能如何继续。

下面的代码是与我正在测试的特定页面的模板。

<UserControl x:Class="MyNamespace.CreditsPage"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             KeyDown="UserControl_KeyDown">
    <Grid x:Name="LayoutRoot">
        <Border>
            <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Vertical">
                <TextBlock TextAlignment="Center">
                A line of text.<LineBreak />
                <LineBreak />
                A line of text.<LineBreak />
                <LineBreak />
                A line of text.<LineBreak />
                <LineBreak />
                A line of text.<LineBreak />
                </TextBlock>
            </StackPanel>
        </Border>
    </Grid>
</UserControl>

在WPF中,对这一问题的明显的解决办法是处理PreviewKeyDown事件,但不幸的是,这是不可用在Silverlight 2,任何想法将受到欢迎(为什么Silverlight的事件路由的简短解释行为,因为它是)。

有帮助吗?

解决方案

可以从主的UIElement管理用户输入:Application.Current.RootVisual

Application.Current.RootVisual.KeyDown += Application_KeyDown

然后,可以在Application_KeyDown方法从键盘所有用户输入处理。

您也可以看看这个问题:在Canvas

其他提示

我试过你提供,没有一个问题交给KeyDown事件。在XAML

有一件事情,可能会导致它:Silverlight插件将只能看到输入事件是否被聚焦。因此,尝试在浏览器中点击Silverlight内容按下键之前,给它输入焦点。

让我知道这是否解决您的问题或没有。

scroll top