2009-02-28 56 views
0

我一直试图在Silverlight应用程序中处理UserControl(页面)的KeyDown事件,但Silverlight用户输入功能似乎存在一些奇怪的行为。在任何情况下事件都没有得到提升。我甚至试图将事件处理程序附加到UserControl中的每个容器控件,但仍然没有运气。事实上,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的事件路由的简短说明表现得如此)。

+0

呵呵,倒票? – Noldorin 2009-06-16 17:44:56

回答

2

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

Application.Current.RootVisual.KeyDown += Application_KeyDown 

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

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

1

我试过你提供的xaml,并没有处理KeyDown事件的问题。

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

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

+0

啊,它似乎实际上是捕获KeyDown事件的根UserControl页面。我在帖子中描述的情况稍微不准确,因为在该XAML中指定的UserControl实际上是SwitcherPage的内容/子项。 – Noldorin 2009-03-01 12:50:45