2

我有一个用户控件,它可能包含许多不同类型的控件(例如按钮、文本框、组合框或复选框)。我需要一种通用的方法来跟踪是否有任何更改。在大多数情况下,我不关心细节(即我不需要知道哪个文本框发生了变化)。当我看到 时EventManager.RegisterClassEvent,我认为这将是我的解决方案,但很快我意识到它不是。这个问题是它被解雇了太多。例如,如果我在同一个控件中有一个按钮和一个组合框,那么当我点击组合框下拉菜单时也会触发 button.click 事件。

在 WinForms 中,我必须遍历用户控件中的所有控件并订阅适当的事件(例如 TextBox.TextChanged 或 ComboBox.SelectedIndexChanged),这很乏味但很有效。我希望在 WPF 中有更好更简单的方法来做到这一点。

4

2 回答 2

2

路由事件:

<UserControl x:Class="..." TextBoxBase.TextChanged="UserControl_TextChanged" 
Selector.SelectionChanged="UserControl_SelectionChanged" 
ToggleButton.Checked="UserControl_Checked" 
ButtonBase.Click="UserControl_Click" />
于 2010-12-05T21:57:30.273 回答
0

您可以进行此检查以验证 UserControl_Click 事件中的 e.source 以处理此问题

If(e.Source.GetType()==typeof(Button))
{
  // your code
}
于 2010-12-06T05:42:18.850 回答