每次更改任何控件时,如何才能获得事件?

时间:2013-08-31 18:16:31

标签: c# wpf

我有很长的表格,有一堆CheckBox,偶尔还有一些TextBox输入。我希望在任何控件更改时都会引发事件(即,更改任何CheckBox状态或更改任何TextBox.Text)。是否有一种全局方法可以在不必为每个控件添加事件处理程序的情况下执行此操作?

4 个答案:

答案 0 :(得分:7)

WPF及其声明性质的一个优点是事件是在可视化树下继承的。

<Window x:Class="MyApplication.MainWindow"
    ....
   TextBox.TextChanged="TextBox_TextChanged" CheckBox.Checked="CheckBox_Checked">

所有TextBoxCheckBox控件都将继承这些事件处理程序。可以在Grid等其他控件中采用相同的方法,因此只有网格中的控件会受到影响。

答案 1 :(得分:1)

这样做的一种方法是继承CheckBoxTextBox类,并在这些类中实现所需的处理程序。

您仍需要查看申请表,并将标准CheckBoxTextBox替换为您的课程。

答案 2 :(得分:1)

您可以在窗口或用户控件上使用TextBoxBase.TextChanged =“MainWindow_OnTextChanged”。

答案 3 :(得分:1)

WPF中有所谓的类事件。把它放在表单的构造函数中:

EventManager.RegisterClassHandler(typeof(TextBox), TextBox.TextChangedEvent, 
    new RoutedEventHandler(AnyTextBox_OnTextChanged));

这样,您就可以将处理程序注册到所有文本框的TextChanged事件。与复选框类似:

EventManager.RegisterClassHandler(typeof(CheckBox), CheckBox.CheckedEvent,
    new RoutedEventHandler(AnyCheckBox_OnChecked));