问题概述:
在比TextBox
高的电平定义的任何KeyBinding
的(与指派无修饰键),可以防止用户从TextBox
内键入这些密钥。WPF键绑定吞咽键,防止文本框使用
最小XAML层次:
<Window>
<UserControl>
<Border>
<UserControl>
<TextBox>
最小命令/键绑定:
<UserControl.Resources>
<RoutedUICommand x:Key="Commands.SomeCommand" />
</UserControl.Resources>
<UserControl.InputBindings>
<KeyBinding Key="A" Command="{StaticResource Commands.SomeCommand} />
</UserControl.InputBindings>
<UserControl.CommandBindings>
<CommandBinding Command="{StaticResource Commands.SomeCommand}" Executed="..." />
</UserControl.CommandBindings>
Command
的和KeyBinding
,在所述第一UserControl
级定义的。所以在这个例子中,在文本框中,用户可以自由输入,直到他们按下A
键,然后它不会将该字母插入到文本框中。我可以清楚地看到,TextBox.KeyDown
和TextBox.PreviewKeyDown
是射击,当你按下键A
(和Handled = false
),但信不会被添加到文本框中的文本和TextBox.PreviewTextInput
不不火。
我正在寻找任何建议,可能表明什么吞咽按键,并阻止它得到处理的文本框,或任何有关我如何调试此问题。
编辑:
感谢Snoop,我能够清楚地看到问题。
TextBox.PreviewKeyDown
隧道下来,大火通过视觉树,开始在窗口,在文本框TextBox.KeyDown
气泡回结束了起始于文本框,并朝窗户TextBox.KeyDown
被处理好的设置为标题通过设置KeyBinding的第一个UserControl为true。TextBox.PreviewTextInput
从不触发,文本框也不处理输入,因为KeyDown事件被设置为已处理。
这仍然留下问题,如何防止UserControl处理输入,如果文本框有焦点?在命令执行过程中,我可以检查文本框是否有键盘焦点,但是现在已经太晚了。
我相信[Snoop](https://snoopwpf.codeplex.com)有一个选项来监视事件。 – mnistic
@mnistic:感谢您的建议,我能够找到一些额外的细节并更新了问题。 – caesay