Tüm türüne ciltleme eklemek için CommandManager.RegisterClassInputBinding kullanıyorum. Şimdi onu kaldırmak istiyorum.CommandManager.RegisterClassInputBinding ile eklenen giriş bağlaması nasıl kaldırılır?
Test ettiğim şey budur.
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");
}
Bu yöntem, + HCtrl olarak adlandırılan ve Ctrl + S için bağlayıcı yeni giriş kaydeder edilir. Ben Ctrl + H önce Ctrl + S basarsanız çalışmıyor, ama öyle sonra bunu bastığımda.
Ben sender.InputBindings
teslim ve sadece bir bağlayıcı (Ctrl + S) vardı bu yüzden RegisterClassInputBinding()
mevcut her örneğine bağlama eklemez sonucuna yerine sınıfa ilişkili bağlamaları depolar ve daha sonra bunları karşılaştırır bir jest
Ama neden RemoveClassInputBinding()
yöntemi yok? :(
Düzenleme
Hatta o uygulamak için önemsiz, buna rağmen bunun için yerli yöntem bulamıyorum hala yansıma yoluyla istediği her şeyi yapmayı başardı, ancak.
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);
Eğer öyleyse, Visual Studio gibi anahtar akorları uygulamak için arıyorsunuz bu? yararlı olabilir: http://kent-boogaart.com/blog/multikeygesture – CodeNaked