WPF эквивалент KeyEventArgs Winform - Вызов события KeyDown с определенным ключом

Как конвертировать приведенный ниже код, который работает с Winforms заставить его работать с WPF:

  textBox1.Text = (input); 
  KeyEventArgs ev = new KeyEventArgs(Keys.Enter);
  textBox1_KeyDown(sender, ev);

Я хочу призвать KeyDown событие с определенным ключом, так что определенное значение вводится в textBox1 автоматически.

1 ответ

Решение

Чтобы подписаться на KeyDown Событие TextBox Используя WPF для ввода произвольного текста при нажатии определенной клавиши, вы можете использовать один из следующих методов:

Способ 1. Определите событие, используя XAML (вам не нужно вручную подписываться на событие):

XAML:

<Window x:Class="WpfApp1.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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>

        <!-- define your TextBox and the KeyDown-event here -->
        <TextBox x:Name="MyTextBox" Width="120" Height="30" KeyDown="MyTextBox_KeyDown"/>

    </Grid>
</Window>

C# -код:

using System.Windows;
using System.Windows.Input;

namespace WpfApp1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.InitializeComponent();
        }

        private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
        { 
            // if pressed key is "Enter", do something
            if (e.Key == Key.Enter)
            {
                this.MyTextBox.Text = "Some Text!";
            }
        }
    }
}

Способ 2 - Определите событие и подпишитесь на него с помощью кода:

XAML:

<Window x:Class="WpfApp1.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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>

        <!-- define your TextBox here -->
        <TextBox x:Name="MyTextBox" Width="120" Height="30"/>

    </Grid>
</Window>

C# -код:

using System.Windows;
using System.Windows.Input;

namespace WpfApp1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.InitializeComponent();
            this.MyTextBox.KeyDown += this.MyTextBox_KeyDown;
        }

        private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
        { 
            // if pressed key is "Enter", do something
            if (e.Key == Key.Enter)
            {
                this.MyTextBox.Text = "Some Text!";
            }
        }
    }
}

Для вызова KeyDown событие с определенным ключом (здесь: Key.Enter ) ты можешь использовать:

using System;
using System.Windows.Interop;

KeyEventArgs enterPressedArgs = new KeyEventArgs(Keyboard.PrimaryDevice, new HwndSource(0, 0, 0, 0, 0, "", IntPtr.Zero), 0, Key.Enter);
this.MyTextBox_KeyDown(null, enterPressedArgs);
Другие вопросы по тегам