Как отключить ярлыки в WPF TextBox - PullRequest
7 голосов
/ 22 марта 2009

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

Ответы [ 2 ]

3 голосов
/ 22 марта 2009
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>

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

3 голосов
/ 22 марта 2009

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

...