2010-12-05 3 views
2

У меня есть usercontrol, который может содержать множество различных типов элементов управления (например, кнопка, текстовое поле, поле со списком или флажок). Мне нужен общий способ отслеживания изменений. В большинстве случаев мне не нужны детали (т. Е. Мне не нужно знать, какое текстовое поле было изменено). Когда я увидел EventManager.RegisterClassEvent, я подумал, что это будет мое решение, но скоро я понимаю, что это не так. Эта проблема заключается в том, что она слишком много выстрелила. Например, если у меня есть кнопка и combobox в том же элементе управления, событие button.click также запускается, когда я попадаю в раскрывающийся список combobox.Ускоренный способ отслеживания «измененного» элемента управления?

В WinForms мне пришлось перебирать все элементы управления в usercontrol и подписаться на соответствующее событие (например, TextBox.TextChanged или ComboBox.SelectedIndexChanged), но это утомительно, но работает. Я надеюсь, что в WPF есть лучший и простой способ сделать это.

ответ

2

перенаправленных событий:

<UserControl x:Class="..." TextBoxBase.TextChanged="UserControl_TextChanged" 
Selector.SelectionChanged="UserControl_SelectionChanged" 
ToggleButton.Checked="UserControl_Checked" 
ButtonBase.Click="UserControl_Click" /> 
+0

Я не понимаю вашего ответа. Проблема в том, что, используя ваш xaml, если у меня есть combobox в этом UserControl, я также получаю событие UserControl_Click, когда я просто нажимаю кнопку выпадающего списка combobox. Как я могу это предотвратить? Для combobox я просто хочу, чтобы событие SelectionChanged запускалось после того, как я действительно изменил выделение. – newman 2010-12-06 03:17:14

0

Вы можете поместить эту проверку, чтобы проверить e.Source в случае UserControl_Click, чтобы справиться с этим

If(e.Source.GetType()==typeof(Button)) 
{ 
    // your code 
} 
Смежные вопросы