Textbox Enter Key event not in WPF

Textbox Enter Key event not in WPF

问题描述:

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://*.com/a/7086853/873979) – Haritha 2013-03-19 04:18:30

有没有必要写代码两次。你也可以这样做。

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

在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(); 
    } 
} 

在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