检测控件上的默认按钮

时间:2011-08-08 15:09:33

标签: c# wpf event-handling custom-controls defaultbutton

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

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

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

为了能够创建这种行为,我必须能够检测容器中是否存在defaultbutton,并且必须在cutom控件的c#代码中完成。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

由于我无法知道我从自定义控件中获得了哪些其他控件,所以我选择了这样:

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

即使它意味着要执行更多代码,它也能很好地工作。