Как отключить ярлыки в текстовом поле WPF

Я хочу отключить все ярлыки по умолчанию в текстовом поле WPF. Ярлыки, как Ctrl + A, Ctrl + V, Ctrl + C etc. Можно ли это сделать?. Мне кажется, что эти ярлыки выполняются до KeyDown событие

2 ответов


вы можете перехватить нажатия клавиш в PreviewKeyDown событие. Установите e.Handled члены true и это предотвратит фактическую обработку ключей.


public Window1()
{
    InitializeComponent();
    CommandManager.AddPreviewCanExecuteHandler(_textBox, _canExecute);
}

private void _canExecute(object sender, CanExecuteRoutedEventArgs e)
{
    e.CanExecute = false;
    e.Handled = true;
}

вышеуказанное предотвратит TextBox от говорить, что он может обрабатывать любой. Вы можете выборочно выбрать, какие команды вы хотите отключить, изучив EventArgs. Или вы можете сделать это в XAML:

<TextBox x:Name="_textBox">
    <TextBox.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Copy" CanExecute="_canExecute"/>
    </TextBox.CommandBindings>
</TextBox>

здесь мы просто отключаем выполнение команды Copy. Control-C не будет работать, а также контекстное меню или главное меню. Фактически, любой элемент управления, выполняющий команду Copy, будет отключен, если фокус находится в TextBox.