有没有办法在 WPF 中有效地“别名”命令?我的情况是这样的:我创建了一个应用程序,它在具有许多自定义画布的图形编辑器的上下文中使用 ApplicationCommands.Delete。这些画布上的一些控件使用 TextBox,但问题是:TextBox 不响应 ApplicationCommands.Delete,它响应 EditorCommands.Delete。有什么方法可以干净地让 TextBox 响应 ApplicationCommands.Delete 而无需在每个 TextBox 实例上进行子类化或手动设置绑定?
问问题
311 次
1 回答
2
为了回答您的具体问题,我知道无法将两个单独的路由命令视为同一命令。但是因为ApplicationCommands.Delete
是路由命令,在传递到目标后,TextBox
并没有命令绑定,就会开始冒泡。因此,满足您要求的最简单的解决方案是安装一个命令绑定ApplicationCommands.Delete
,TextBox
以Window
实现您想要的行为。
这是一个在父级上安装处理程序的示例,该处理程序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);
}
于 2011-02-24T04:32:00.873 回答