Ich habe CommandManager.RegisterClassInputBinding verwendet, um dem gesamten Typ eine Bindung hinzuzufügen. Jetzt möchte ich es entfernen.So entfernen Sie Eingabebindungen, die über den CommandManager hinzugefügt wurden.RegisterClassInputBinding?
Das habe ich getestet.
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");
}
Diese Methode wird auf Ctrl genannt + H und registriert neue Eingabe Bindung für Ctrl + S. Wenn ich Strg drücken + S vor Ctrl +H es nicht funktioniert, aber wenn ich drücken, nachdem es der Fall ist.
Ich habe sender.InputBindings
und es gab nur eine Bindung (Ctrl +S), damit ich festgestellt, dass RegisterClassInputBinding()
nicht die Bindung an jede vorhandene Instanz nicht hinzufügen, sondern speichert Bindungen zu der Klasse zugeordnet ist, und vergleicht sie dann zu behandelte Geste.
Aber warum gibt es dann keine RemoveClassInputBinding()
Methode? :(
bearbeiten
ich es sogar geschafft, zu tun, was ich durch Reflexion bestimmt, aber immer noch nicht native Methode dafür finden können, obwohl es trivial wäre zu implementieren.
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);
Suchen Sie wie in Visual Studio Schlüssel Akkorde implementieren Wenn ja dieses? kann hilfreich sein: http://kent-boogaart.com/blog/multikeygesture – CodeNaked