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 = "";
}
}
}
有没有必要写代码两次。你也可以这样做。
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);
}
}
这是如何回答这个问题的答案是Windows窗体和问题是WPF? KeyEventArgs.KeyCode只存在于System.Windows.Forms.KeyEventArgs上,而不存在于WPF System.Windows.Input.KeyEventArgs中相同的类名称,但不同的名称空间以及不同的属性和方法。 – 2013-07-23 23:27:55
我同意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);
}
}
}
}
结果:
有什么错误讯息?在'KeyDown'方法中放置一个断点,看它是否被命中。另外,您应该将ViewModel代码移动到它自己的方法中,因为您重复同样的事情两次。从按钮点击处理程序和keydown处理程序调用此方法。 – keyboardP 2013-03-18 22:16:15
对于MVVM,这是 [answer](http://*.com/a/7086853/873979) – Haritha 2013-03-19 04:18:30