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