4

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

4

4 回答 4

7

WPF 及其声明性的优点之一是事件沿可视树继承。

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

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

于 2013-08-31T18:42:40.937 回答
1

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

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

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

EventManager.RegisterClassHandler(typeof(CheckBox), CheckBox.CheckedEvent,
    new RoutedEventHandler(AnyCheckBox_OnChecked));
于 2013-08-31T18:50:31.150 回答
1

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

您仍然需要通过您的应用程序并替换标准CheckBoxTextBox您的课程。

于 2013-08-31T18:19:58.633 回答
1

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

于 2013-08-31T18:40:13.677 回答