检测控件上的默认按钮

本文关键字:默认按钮 控件 检测 | 更新日期: 2023-09-27 18:04:44

这看起来很简单,但是我在网上找不到任何关于我想添加到自定义控件的行为。

我的自定义控件是一个带有选项列表的文本框。当用户输入的文本不是列表的一部分时,将出现一个弹出式列表,允许用户选择正确的选项。

有时,在添加了自定义控件的容器上可能有一个默认按钮。如果是,当按下回车键时,如果文本错误,必须显示弹出框。如果没有默认的按钮,在输入时,即使文本是错误的,也不能发生任何事情。

为了能够创建这种行为,我必须能够检测到容器中默认按钮的存在,并且必须在自定义控件的c#代码中完成。

我希望描述足够清楚。提前感谢

检测控件上的默认按钮

您是否考虑过实现MVVM方法和Command模式?只要视图模型知道选项是什么,就可以将默认按钮绑定到命令。只要命令CanExecute处理程序返回false,即没有输入/选择适当的选项,按钮将被禁用,并且不会响应用户按enter。

由于我无法知道自定义控件中还有哪些其他控件,所以我选择这样做:

我用FrameworkElement.Parent做了一个递归函数来找到第一个父节点有了父控件,我就可以查看它包含的每个控件。只要我看到一个按钮,我就必须验证IsDefault是否。对于这个,我使用了VisualTreeHelperGetChildrenCount(DependencyObject obj_Parent)GetChild(DependencyObject obj_Parent, int childIndex)。递归性再次出现…

它工作得很好,即使它意味着执行更多的代码。