WPF中与ActiveControl相当的是什么?

4

在表单中,我可以简单地使用 ActiveControl.name 来获取活动控件的名称。然而在 WPF 中这不起作用。在 WPF 中,与 ActiveControl.name 等效的命令是什么?我可以使用 C# 或 VB。谢谢!

1个回答

2

有两种可能性,但我不确定是否完全符合ActiveControl:

  • Keyboard.FocusedElement:这个静态成员告诉你当前应用程序中哪个元素拥有键盘焦点。
  • FocusManager.GetFocusedElement():这允许您在给定的焦点范围内获取聚焦的元素。请注意,这不能用于任意控件,只能用于具有FocusManager.IsFocusScope设置为true的控件。

这两个选项中有一个是您想要的吗?


是的,我正在寻找当前拥有键盘焦点的元素。所以我猜Keyboard.FocusedElement就是我要找的。我已经尝试使用它,但似乎无法像console.write(keyboard.focusedelement.name)那样正常工作。我做错了什么?谢谢! - Buffy Jones
1
你是否遇到错误?还是什么都没发生?尝试写入Keyboard.FocusedElement的GetType().Name,结果如何?元素是否设置了Name或x:Name?(与Windows Forms不同,WPF设计器默认情况下不提供元素名称。) - itowlson
1
这些元素(所有文本框)都有x:Names。我正在尝试确定具有键盘焦点的文本框的名称(就像ActiveControl.Name对于表单一样)。我尝试了Console.Write(Keyboard.FocusedElement.GetType().Name),但是我得到了“Object reference not set to an instance of an object”的错误,我认为应该是“Window1”(窗口的x:Name)。谢谢您的帮助。 - Buffy Jones
也许我应该让你知道我的目标是什么,因为我可能正在错误的方向上思考。我有10个文本框,它们的x:Name分别是“Description1”到“Description10”。我有一个可见的TextBlock,它的x:Name是“CurrentBox”,告诉我我当前在哪个文本框中,比如“Description5”。 我目前被迫设置每个文本框的GotGocus codebehind,例如CurrentBox.Text="Description5"。当我将更多的控件和功能添加到我的应用程序中时,这将成为一场噩梦!有没有办法将textblock“CurrentBox”与当前文本框的名称进行绑定? - Buffy Jones
1
经过大量的挖掘和实验,我找到了一个替代ActiveControl.Name的东西。Dim textbox As Object = TryCast(FocusManager.GetFocusedElement(Me), Object) CurrentBox = textbox.Name现在我只需要让窗口(“Window1”)在每次焦点改变时运行这段代码。非常感谢! - Buffy Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接