Ser*_*jev 7 c# wpf inputbinding
我使用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");
}
Run Code Online (Sandbox Code Playgroud)
这种方法被称为上Ctrl+ H并注册新的输入结合Ctrl+ S.如果我按Ctrl+ S前Ctrl+ H这是行不通的,但是当我按下它之后.
我检查过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);
Run Code Online (Sandbox Code Playgroud)
ApplicationCommands.NotACommand就是为此目的而设计的:
"此命令始终被忽略,并且不处理导致它的输入事件.这提供了一种关闭内置于现有控件中的输入绑定的方法."
要使用您的示例:
CommandManager.RegisterClassInputBinding(
typeof(TextBox),
new InputBinding(
ApplicationCommands.NotACommand,
new KeyGesture(Key.S, ModifierKeys.Control)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2203 次 |
| 最近记录: |