这看起来很简单,但是我在网上找不到任何关于我想添加到自定义控件的行为。
我的自定义控件是一个带有选项列表的文本框。当用户输入的文本不是列表的一部分时,将出现一个弹出式列表,允许用户选择正确的选项。
有时,在添加了自定义控件的容器上可能有一个默认按钮。如果是,当按下回车键时,如果文本错误,必须显示弹出框。如果没有默认的按钮,在输入时,即使文本是错误的,也不能发生任何事情。
为了能够创建这种行为,我必须能够检测到容器中默认按钮的存在,并且必须在自定义控件的c#代码中完成。
我希望描述足够清楚。提前感谢您是否考虑过实现MVVM方法和Command模式?只要视图模型知道选项是什么,就可以将默认按钮绑定到命令。只要命令CanExecute处理程序返回false,即没有输入/选择适当的选项,按钮将被禁用,并且不会响应用户按enter。
由于我无法知道自定义控件中还有哪些其他控件,所以我选择这样做:
我用FrameworkElement.Parent
做了一个递归函数来找到第一个父节点有了父控件,我就可以查看它包含的每个控件。只要我看到一个按钮,我就必须验证IsDefault
是否。对于这个,我使用了VisualTreeHelper
、GetChildrenCount(DependencyObject obj_Parent)
和GetChild(DependencyObject obj_Parent, int childIndex)
。递归性再次出现…
它工作得很好,即使它意味着执行更多的代码。