-1

我一直在尝试在我的 Silverlight 应用程序中处理 UserControl(页面)的 KeyDown 事件,但 Silverlight 用户输入功能部分似乎存在一些奇怪的行为。在任何情况下都不会引发该事件。我什至尝试将事件处理程序附加到 UserControl 中的每个容器控件,但仍然没有运气。确实,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 事件路由的行为如此的简短解释)。

4

2 回答 2

2

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

Application.Current.RootVisual.KeyDown += Application_KeyDown

然后,您可以在 Application_KeyDown 方法中处理来自键盘的所有用户输入。

你也可以看看这个问题:Handling KeyDown event in a Canvas

于 2009-03-01T23:46:26.433 回答
1

我尝试了您提供的 xaml,并且在处理 KeyDown 事件时没有问题。

可能导致它的一件事:Silverlight 插件只有在获得焦点时才会看到输入事件。因此,请尝试在浏览器中单击 Silverlight 内容,在按键之前为其提供输入焦点。

让我知道这是否解决了您的问题。

于 2009-03-01T03:02:07.877 回答