如何将焦点设置为 UserControl(使其可选择)?

Posted

技术标签:

【中文标题】如何将焦点设置为 UserControl(使其可选择)?【英文标题】:How to set focus to UserControl (make it selectable)? 【发布时间】:2020-07-29 15:55:53 【问题描述】:

我需要将焦点设置到 UserControl 本身,而不是它的子级。 否则我无法实现从缓冲区插入。 :( 设置 Focusable=True 没有帮助。 Google 和 SO 仅说明如何将焦点设置到 UserControl 子级。

我的控件包含: - 工具栏有几个按钮绑定到相应的命令 虚拟机 - 作为过滤器输入的文本框 - DataGrid - 项目列表。

我需要将 Ctrl+V 命令绑定到 VM。但是要处理这个手势UserControl 必须有焦点。当网格中没有项目(VM 的集合为空)时,按钮被禁用,唯一可以获得焦点的元素是 TextBox。但它以自己的方式处理 Ctrl+V,我不想改变这种行为。 因此,当我单击 UserControl 区域时,我需要一些东西来设置焦点。 我相信 UserControl 是最好的选择。 但我不知道如何让它可选。

【问题讨论】:

Otherwise I cannot implement insertion from the buffer - 你能更好地解释一下吗?你的问题太模糊了,我看不懂。同时发布您当前的代码和 XAML。 我添加了一些细节。希望现在更清楚了。 【参考方案1】:

整个问题在于我对控件行为的误解。 我相信这个SO question 清楚地表明了这一点。

因此,设置UserControl.Focusable = true 是不够的。要使其可通过键盘导航,IsTabStop 也必须是 true。为了使 UC 可以通过鼠标单击选择,我们应该在鼠标事件处理程序中调用 Focus()。就是这样。

【讨论】:

这对我来说仍然不够。我创建了一个用户控件(BigDropPin),如果我按“空格”,它应该创建其他用户控件(MiniDropPin)。

以上是关于如何将焦点设置为 UserControl(使其可选择)?的主要内容,如果未能解决你的问题,请参考以下文章

为属性设置默认值并使其可序列化

如何使 URL 参数匹配可选[重复]

如何将对象作为数据类型传递给选择元素并使其可读以在其他地方使用它?

如何将私人加密用户数据存储在数据库中,但使其可供其他选定用户使用?

Python:concurrent.futures 如何使其可取消?

WPF:无法设置焦点