Я не уверен, что это квалифицируется как элегантно, но это работает, но может быть не так полно, как вы хотите (например, если щелкнуть правой кнопкой мыши в текстовом поле и выбрать Вставить из контекстного меню).
См. Вставить событие в текстовое поле WPF
. Установите AcceptsTab в значение true перед обработкой Ctrl-V и восстановите его после:
XAML:
<TextBox AcceptsTab="False"
Height="200"
PreviewKeyDown="TextBox_PreviewKeyDown"
KeyUp="TextBox_KeyUp"/>
C #:
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (!(sender is TextBox textbox))
{
return;
}
if (e.Key == Key.V && (e.KeyboardDevice.IsKeyDown(Key.LeftCtrl) || e.KeyboardDevice.IsKeyDown(Key.RightCtrl)))
{
textbox.AcceptsTab = true;
}
}
private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
if (!(sender is TextBox textbox))
{
return;
}
textbox.AcceptsTab = false;
}
Это можно превратить в поведение, чтобы было проще применить его к большему количеству текстовых полей без написания кода позади.