C# 如何在每次更改任何控件时引发事件?
我有一个很长的表单,有一堆复选框,偶尔还有一些文本框输入。我希望在任何控件更改时(即,任何复选框状态更改或任何TextBox.Text更改)引发事件。是否有一种全局方法可以做到这一点,而不必向每个控件添加事件处理程序?一种方法是对C# 如何在每次更改任何控件时引发事件?,c#,wpf,C#,Wpf,我有一个很长的表单,有一堆复选框,偶尔还有一些文本框输入。我希望在任何控件更改时(即,任何复选框状态更改或任何TextBox.Text更改)引发事件。是否有一种全局方法可以做到这一点,而不必向每个控件添加事件处理程序?一种方法是对复选框和文本框类进行子类化,并在这些类中实现所需的处理程序 您仍然需要检查应用程序并用类替换标准的复选框和文本框。您可以使用TextBoxBase.TextChanged=“MainWindow\u OnTextChanged”在窗口或用户控件上。WPF及其声明性的优点
复选框和文本框
类进行子类化,并在这些类中实现所需的处理程序
您仍然需要检查应用程序并用类替换标准的复选框和文本框。您可以使用TextBoxBase.TextChanged=“MainWindow\u OnTextChanged”在窗口或用户控件上。WPF及其声明性的优点之一是事件从可视树中继承下来
<Window x:Class="MyApplication.MainWindow"
....
TextBox.TextChanged="TextBox_TextChanged" CheckBox.Checked="CheckBox_Checked">
所有TextBox
和CheckBox
控件都将继承这些事件处理程序。在其他控件(如Grid
)中也可以采用相同的方法,因此只有网格中的控件受到影响。WPF中有所谓的类事件。将其放入表单的构造函数中:
EventManager.RegisterClassHandler(typeof(TextBox), TextBox.TextChangedEvent,
new RoutedEventHandler(AnyTextBox_OnTextChanged));
通过这种方式,您可以向所有文本框的TextChanged
事件注册一个处理程序。与复选框类似:
EventManager.RegisterClassHandler(typeof(CheckBox), CheckBox.CheckedEvent,
new RoutedEventHandler(AnyCheckBox_OnChecked));
我可以知道你为什么想要一个全局事件吗?TextBox\u OnLostFocus
对于TextChanged
handler:)@hvd-哈哈对不起,我还在想focus。使用相同的测试项目。不知道关于WPF,即将指出所有控件都可以订阅相同的方法(给定textchanged和checkledchange的签名可以是相同的),但这表明了这一点,而不仅仅是说明了这一点。