2009-02-28 47 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