我使用 CommandManager.RegisterClassInputBinding 将绑定添加到整个类型。现在我想删除它。
这是我测试的。
private void CommandBinding_Executed_1(object sender, ExecutedRoutedEventArgs e)
{
CommandManager.RegisterClassInputBinding(
typeof(TextBox),
new InputBinding(TestCommand, new KeyGesture(Key.S, ModifierKeys.Control)));
MessageBox.Show("CommandBinding_Executed_1");
}
此方法在Ctrl+上调用并为+H注册新的输入绑定。如果我在+之前按+它不起作用,但是当我在它之后按它时。CtrlSCtrlSCtrlH
我检查了一下sender.InputBindings,只有一个绑定 ( Ctrl+ S),所以我得出结论,RegisterClassInputBinding()不会将绑定添加到每个现有实例,而是存储与类关联的绑定,然后将它们与处理的手势进行比较。
但是为什么没有RemoveClassInputBinding()方法呢?:(
编辑
我什至设法通过反射完成了我想要做的事情,但仍然找不到本机方法,尽管实现起来很简单。
var fieldInfo = typeof(CommandManager).GetField(
"_classInputBindings", BindingFlags.Static | BindingFlags.NonPublic);
var fieldData = (HybridDictionary)fieldInfo.GetValue(null);
var inputBindingCollection = (InputBindingCollection)fieldData[typeof(TextBox)];
foreach (var o in inputBindingCollection)
{
if (o == inputBinding)
{
MessageBox.Show("half way there");
}
}
inputBindingCollection.Remove(inputBinding);