gpt4 book ai didi

wpf - 有什么方法可以在 WPF 中为命令起别名吗?

转载 作者:行者123 更新时间:2023-12-02 02:27:47 24 4
gpt4 key购买 nike

有什么方法可以在 WPF 中有效地“别名”命令吗?我的情况是这样的:我创建了一个应用程序,它在具有许多自定义 Canvas 的图形编辑器的上下文中使用 ApplicationCommands.Delete。这些 Canvas 上的一些控件使用 TextBox,但问题在于:TextBox 不响应 ApplicationCommands.Delete,它响应 EditorCommands.Delete。有什么方法可以让 TextBox 干净地响应 ApplicationCommands.Delete,而无需在每个 TextBox 实例上进行子类化或手动设置绑定(bind)?

最佳答案

为了回答您的具体问题,我知道没有办法将两个单独的路由命令视为同一命令。但是因为 ApplicationCommands.Delete 是一个路由命令,在它被传送到它的目标后,TextBox 并且没有命令绑定(bind),它将开始冒泡。因此,满足您要求的最简单的解决方案是在 TextBox 之间的某处为 ApplicationCommands.Delete 安装命令绑定(bind),一直到 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);
}

关于wpf - 有什么方法可以在 WPF 中为命令起别名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com