2012-09-12 53 views
3

我正在使用C#和XAML,在Windows 8上開發一個metro樣式的應用程序。我想捕獲keyup事件上的輸入按鈕,但它適用於所有鍵盤按鈕輸入和空格鍵。我的代碼捕獲在Windows 8上的輸入和空格8 Metro風格的c#應用程序

XAML

<Button x:Name="btnName" KeyUp="KeyboardKey_Pressed"> 
</Button> 

C#源

public void KeyboardKey_Pressed(object sender, KeyRoutedEventArgs e) 
{   
    if (e.Key == Windows.System.VirtualKey.Enter) 
      ......   
} 

我知道,如果我使用文本框,而不是按鈕,它會工作,但我想用一個按鈕。我怎樣才能做到這一點?

+0

不使用TextBox上的按鈕從正常的UI約定中解脫出來嗎? – Bern

回答

0

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh868246.aspx的:

ButtonBase(對於按鈕的基類)處理KEYUP,以便它可以......事件的這種處理 完成時 檢查空格鍵或回車鍵ButtonBase覆蓋虛擬方法OnKeyUp。

因此,要防止它捕獲空格鍵或Enter鍵,請創建一個從Button派生的新按鈕類,重寫OnKeyUp並且不要調用基類實現。

1

這工作:

using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Input; 


namespace YourNamespace 
{ 
    public sealed class NiceButton: Button 
    { 
     public NiceButton() 
      : base() 
     { 

     } 
     protected override void OnKeyUp(KeyRoutedEventArgs e) 
     { 
     } 
    } 
} 

由包括您的命名空間中的xmlns XAML中使用NiceButton而不是你的巴頓。

相關問題