Ho usato CommandManager.RegisterClassInputBinding per aggiungere il binding all'intero tipo. Ora voglio rimuoverlo.Come rimuovere il collegamento di input aggiunto tramite CommandManager.RegisterClassInputBinding?
Questo è quello che ho testato.
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");
}
Questo metodo è chiamato Ctrl + H e registra nuovi input vincolante per Ctrl +S. Se premo Ctrl +S prima Ctrl +H non funziona, ma quando premo dopo lo fa.
ho controllato sender.InputBindings
e c'era solo un legame (Ctrl +S) così ho concluso che RegisterClassInputBinding()
non aggiunge l'associazione a ogni istanza esistente, ma invece memorizza attacchi associati alla classe e poi li confronta gesto gestita.
Ma allora perché non esiste il metodo RemoveClassInputBinding()
? :(
Modifica
ho anche riuscito a fare ciò che ho inteso attraverso la riflessione, ma ancora non riesce a trovare il metodo nativo per questo, anche se sarebbe banale da implementare.
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);
Stai cercando di implementare accordi chiave come in Visual Studio Se è così, questo? potrebbe essere utile: http://kent-boogaart.com/blog/multikeygesture – CodeNaked