在WPF MVVM应用程序中,我希望能够使用Esc键撤消对单个TextBox元素的更改。我为此设置了一个命令,因此我想通过XAML触发它:
<Window.InputBindings>
<KeyBinding Command="{Binding EscKeyCommand}" CommandParameter="{Binding FocusManager.FocusedElement}" Gesture="ESC" />
</Window.InputBindings>
这个想法是CommandParameter传递当前关注的TextBox的ElementName(如果确实是焦点所在),然后可以在ViewModel中处理适当的撤消。我已经为CommandParameter尝试了许多选项,包括上面的选项,但是它们都返回null。所以,
问题
如何通过CommandParameter传递当前关注的元素名称?
答案 0 :(得分:1)
很高兴您已经注意到%lu
。但是仍然有一个答案。由于KeyBoard.FocusedElment
是附加属性,因此绑定它的正确方法应该是:
FocusManager.FocusedElement
答案 1 :(得分:1)
FocusManager
使元素具有逻辑焦点。要使用FocusManager.FocusedElement
,需要提供范围,在这种情况下,窗口为(this)
IInputElement focusedControl = FocusManager.GetFocusedElement(this);
但是在您的情况下,因为它是一个文本框,所以您需要重点使用Keyboard.FocusedElement
。
在视图模型中执行EscKeyCommand
时,使用以下语法获取具有键盘焦点的元素,然后清除文本。
UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;