2013-03-18 126 views
1

keydown事件無法正常工作。當按下回車鍵時,我想提高與按鈕相同的事件。這裏是c#Textbox Enter Key event not in WPF

public partial class Search : Control 
    { 
     public SearchRevision() 
     { 
      InitializeComponent(); 
     } 


     private void Button_Click_1(object sender, RoutedEventArgs e) 
     { 
      SearchViewModel vm = this.DataContext as SearchViewModel; 
      if (vm != null) 
       vm.Refresh(); 
     } 

     private void myTextBox_KeyDown(Object sender, KeyEventArgs e) 
     { 
      if (e.Key == Key.Enter) 
      { 
       SearchViewModel vm = this.DataContext as SearchViewModel; 
       if (vm != null) 
        vm.Refresh(); 
      } 
     } 

     private void myTextBox_Escape(Object sender, KeyEventArgs e) 
     { 
      if (e.Key == Key.Escape) 
      { 
       txtName.Text = ""; 
      } 
     } 
    } 
+1

有什麼錯誤訊息?在'KeyDown'方法中放置一個斷點,看它是否被命中。另外,您應該將ViewModel代碼移動到它自己的方法中,因爲您重複同樣的事情兩次。從按鈕點擊處理程序和keydown處理程序調用此方法。 – keyboardP 2013-03-18 22:16:15

+1

對於MVVM,這是 [answer](http://stackoverflow.com/a/7086853/873979) – Haritha 2013-03-19 04:18:30

回答

-3

有沒有必要寫代碼兩次。你也可以這樣做。

private void myTextBox_KeyDown(Object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     //you may pass the parameters if you need 
     Button_Click_1(null,null); 
    } 
} 
+0

這是如何回答這個問題的答案是Windows窗體和問題是WPF? KeyEventArgs.KeyCode只存在於System.Windows.Forms.KeyEventArgs上,而不存在於WPF System.Windows.Input.KeyEventArgs中相同的類名稱,但不同的名稱空間以及不同的屬性和方法。 – 2013-07-23 23:27:55

+0

我同意Rodney Foley,e.KeyCode在WPF文本框中不存在。 – Cheung 2014-01-30 13:27:34

4

在WPF中沒有的鍵碼或keys.enter 代替你可以使用:

private void myTextBox_KeyDown(Object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Enter) 
    { 
     SearchViewModel vm = this.DataContext as SearchViewModel; 
     if (vm != null) 
      vm.Refresh(); 
    } 
} 
1

在WPF,TextBox元素不會得到機會,利用「回車」創建keyup事件,直到按鈕你不會設置屬性:AcceptsReturn =「True」。

但是,它不能解決處理TextBox元素中的KeyUp事件的問題。按下「ENTER」後,您將在TextBox中獲得新的文本行。

我已經通過使用Bubble事件策略解決了使用TextBox元素的KeyUp事件的問題。這很簡單。你必須在一些(任何)父元素附加keyUp事件處理程序:

XAML:

<Window x:Class="TextBox_EnterButtomEvent.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:TextBox_EnterButtomEvent" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid KeyUp="Grid_KeyUp"> 
     <Grid.RowDefinitions> 
      <RowDefinition/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height ="0.3*"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Row="1" Grid.Column="1" Padding="0" TextWrapping="WrapWithOverflow"> 
      Input text end press ENTER: 
     </TextBlock> 
     <TextBox Grid.Row="2" Grid.Column="1" HorizontalAlignment="Stretch"/> 
     <TextBlock Grid.Row="4" Grid.Column="1" Padding="0" TextWrapping="WrapWithOverflow"> 
      You have entered: 
     </TextBlock> 
     <TextBlock Name="txtBlock" Grid.Row="5" Grid.Column="1" HorizontalAlignment="Stretch"/> 
    </Grid> 
</Window> 

C#邏輯部分(KeyUp事件處理程序連接到網格元素):

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Grid_KeyUp(object sender, KeyEventArgs e) 
    { 
     if(e.Key == Key.Enter) 
     { 
      TextBox txtBox = e.Source as TextBox; 
      if(txtBox != null) 
      { 
       this.txtBlock.Text = txtBox.Text; 
       this.txtBlock.Background = new SolidColorBrush(Colors.LightGray); 
      } 
     } 
    } 
} 

結果:

Application main window with result