繁体   English   中英

如何通过XAML中的CommandParameter传递当前关注的元素名称?

[英]How can I pass the currently focused element name through a CommandParameter in XAML?

在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传递当前关注的元素名称?

很高兴您已经注意到KeyBoard.FocusedElment 但是仍然有一个答案。 由于FocusManager.FocusedElement是附加属性,因此绑定它的正确方法应该是:

CommandParameter="{Binding (FocusManager.FocusedElement), ElementName='name of the window'}"

FocusManager为元素赋予逻辑焦点。 要使用FocusManager.FocusedElement ,需要提供范围,在本例中为窗口(this)

IInputElement focusedControl = FocusManager.GetFocusedElement(this);

但是在您的情况下,因为它是一个文本框,所以需要重点使用Keyboard.FocusedElement

在视图模型中,执行EscKeyCommand时,使用以下语法获取具有键盘焦点的元素,然后清除文本。

UIElement elementWithFocus = Keyboard.FocusedElement as UIElement;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM