Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在每次更改任何控件时引发事件?_C#_Wpf - Fatal编程技术网

C# 如何在每次更改任何控件时引发事件?

C# 如何在每次更改任何控件时引发事件?,c#,wpf,C#,Wpf,我有一个很长的表单,有一堆复选框,偶尔还有一些文本框输入。我希望在任何控件更改时(即,任何复选框状态更改或任何TextBox.Text更改)引发事件。是否有一种全局方法可以做到这一点,而不必向每个控件添加事件处理程序?一种方法是对复选框和文本框类进行子类化,并在这些类中实现所需的处理程序 您仍然需要检查应用程序并用类替换标准的复选框和文本框。您可以使用TextBoxBase.TextChanged=“MainWindow\u OnTextChanged”在窗口或用户控件上。WPF及其声明性的优点

我有一个很长的表单,有一堆复选框,偶尔还有一些文本框输入。我希望在任何控件更改时(即,任何复选框状态更改或任何TextBox.Text更改)引发事件。是否有一种全局方法可以做到这一点,而不必向每个控件添加事件处理程序?

一种方法是对
复选框和
文本框
类进行子类化,并在这些类中实现所需的处理程序


您仍然需要检查应用程序并用类替换标准的
复选框和
文本框。

您可以使用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的签名可以是相同的),但这表明了这一点,而不仅仅是说明了这一点。