C# 文本框输入键事件在WPF中不起作用

C# 文本框输入键事件在WPF中不起作用,c#,wpf,C#,Wpf,keydown事件工作不正常。我想在按下enter键时引发与按钮相同的事件。这是c# 无需编写两次代码。你也可以这样做 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);

keydown事件工作不正常。我想在按下enter键时引发与按钮相同的事件。这是c#


无需编写两次代码。你也可以这样做

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

在wpf中没有键代码或键。输入 相反,您可以使用:

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中,除非您不设置属性:AcceptsReturn=“True”,否则TextBox元素将没有机会使用“Enter”按钮来创建KeyUp事件

但是,它无法解决在TextBox元素中处理KeyUp事件的问题。按“回车”键后,您将在文本框中获得一个新的文本行

我已经通过使用气泡事件策略解决了使用TextBox元素的KeyUp事件的问题。它又短又简单。必须在某些(任何)父元素中附加KeyUp事件处理程序:

XAML:

结果:

在WPF中,有时无法识别“Key.enter”,您必须使用“System.Windows.Input.Key.enter”


我遇到了与OP相同的问题,这是对我有效的解决方案。

错误消息是什么?在
KeyDown
方法中放置一个断点,并查看它是否被命中。此外,在重复相同的操作两次时,应将ViewModel代码移动到其自己的方法。从按钮单击处理程序和按键向下处理程序调用此方法。对于MVVM,这是如何回答问题的,因为答案是针对Windows窗体的,而问题是WPF?KeyEventArgs.KeyCode仅存在于System.Windows.Forms.KeyEventArgs上,而不存在于WPF System.Windows.Input.KeyEventArgs上相同的类名,但不同的命名空间和不同的属性和方法。我同意Rodney Foley的观点,即WPF文本框中不存在e.KeyCode。
private void myTextBox_KeyDown(Object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        SearchViewModel vm = this.DataContext as SearchViewModel;
        if (vm != null)
            vm.Refresh();
    }
}
<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>
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);
            }
        }
    }
}
if (e.Key == System.Windows.Input.Key.Enter)
{
    //Your code here
}