3

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

    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 = "";
            }
        }
    }
4

4 回答 4

8

在 wpf 中没有 keycode 或 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();
    }
}
于 2014-04-23T06:32:40.930 回答
2

在 WPF 中,除非您不设置属性:AcceptsReturn="True",否则 TextBox 元素将无法使用“Enter”按钮创建 KeyUp 事件。

但是,它不能解决在 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);
            }
        }
    }
}

结果:

带有结果的应用程序主窗口

于 2015-12-03T17:47:06.823 回答
0

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

if (e.Key == System.Windows.Input.Key.Enter)
{
    //Your code here
}

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

于 2021-02-26T19:28:27.507 回答
-4

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

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);
    }
}
于 2013-03-18T22:30:01.837 回答