如何从既不属于窗口也不属于用户控件的代码中获取WPF中当前关注的元素/控件?

推荐答案

这取决于你追求的焦点类型,LogicalKeyboard.

  • Keyboard focus是指currently接收键盘输入的元素.整个桌面中只有一个元素可以具有键盘焦点.
  • Logical focus指的是焦点范围中的元素,would接收键盘输入,if焦点范围是活动的.

通常,逻辑焦点是上次在该焦点范围内接收到键盘焦点的元素.焦点范围可能是一个应用程序、一个表单、一个顶级窗口、一个选项卡等等.换句话说,逻辑焦点是窗体或窗口如何记住上次使用键盘焦点的控件.

FocusManager获取指定焦点范围内具有逻辑焦点的元素,在本例中为窗口(this):

IInputElement focusedControl = FocusManager.GetFocusedElement(this);

Keyboard将返回具有当前键盘输入焦点的元素:

IInputElement focusedControl =  Keyboard.FocusedElement;

.net相关问答推荐

";Make Async ValueTask/ValueTask方法分期分配发生了什么?

如何将 signalR 添加到不同项目中的后台服务?

如何在 NET 5 / 6 中使用 Direct3D11CaptureFramePool

CurrentCulture、InvariantCulture、CurrentUICulture 和 InstalledUICulture 之间的区别

如何解决请确保文件可访问并且它是有效的程序集或 COM 组件?

每第 N 个字符/数字拆分一个字符串/数字?

为什么 .NET 中没有可序列化 XML 的字典?

共享 AssemblyInfo 用于跨解决方案的统一版本控制

Winforms:Application.Exit vs Environment.Exit vs Form.Close

C#:内存不足异常

C# 方法可以定义为采用的最大参数数是多少?

如何在 C# 7 中返回多个值?

什么是 ToString("N0") 格式?

资源(.resx)文件有什么好处?

是否可以完全用托管的 .NET 语言编写 JIT 编译器(本地代码)

使用+运算符的字符串连接

C# 应用程序中的全局键盘捕获

如果选中,则更改列表框项的 WPF DataTemplate

如何使用 NPOI 读取文件

如何判断枚举是否包含数字?