Чтобы ответить на ваш конкретный вопрос, я не знаю способа заставить две отдельные маршрутизируемые команды рассматриваться как одна и та же команда. Но поскольку ApplicationCommands.Delete
является перенаправленной командой, после ее доставки к цели TextBox
и привязки команды нет, она начнет пузыриться. Таким образом, самое простое решение, которое соответствует вашим требованиям, - это установить привязку команды для ApplicationCommands.Delete
где-то между TextBox
вплоть до Window
и, возможно, включая *1005*, который реализует желаемое вами поведение.
Вот пример, который устанавливает обработчик на родительский элемент Grid
, который отправляет "правильную" команду на фокусированный элемент, который в этом случае будет TextBox
:
<Grid>
<Grid.CommandBindings>
<CommandBinding Command="ApplicationCommands.Delete" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed"/>
</Grid.CommandBindings>
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_Edit">
<MenuItem Header="_Delete" Command="ApplicationCommands.Delete"/>
</MenuItem>
</Menu>
<StackPanel>
<TextBox Text="Some text"/>
</StackPanel>
</DockPanel>
</Grid>
и вот код:
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
EditingCommands.Delete.Execute(null, Keyboard.FocusedElement);
}