CommandManager.RegisterClassInputBinding을 사용하여 전체 유형에 바인딩을 추가했습니다. 이제 그걸 제거하고 싶습니다.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");
}
이 방법 + H Ctrl 키를 불러 Ctrl 키 S + 바인딩 새로운 입력을 등록한다. 내가 Ctrl 키 + H 전에 Ctrl 키 + S을 누르면 작동하지 않습니다, 그러나 그것은 수행 후 나는 그것을 누르면.
나는 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);
당신이 그렇다면 Visual Studio에서 같은 키 코드를 구현하기 위해 찾고 계십니까이? 도움이 될 수 있습니다 : http://kent-boogaart.com/blog/multikeygesture – CodeNaked