2010-12-05 4 views
2

J'ai un usercontrol qui peut contenir de nombreux types de contrôles différents (par exemple un bouton, une zone de texte, une liste déroulante ou une case à cocher). J'ai besoin d'un moyen générique de suivre si quelque chose a été changé. Dans la plupart des cas, je ne me soucie pas des détails (c'est-à-dire que je n'ai pas besoin de savoir quelle zone de texte a changé). Quand j'ai vu EventManager.RegisterClassEvent, j'ai pensé que ce serait ma solution, mais bientôt je me rends compte que ce n'est pas le cas. Ce problème est qu'il est trop tiré. Par exemple, si j'ai un bouton et une zone de liste déroulante dans le même contrôle, l'événement button.click est également déclenché lorsque j'appuie sur la liste déroulante de la liste déroulante.La façon la plus simple de suivre "modifié" d'un contrôle?

Dans WinForms, j'ai dû parcourir tous les contrôles de la commande usercontrol et m'abonner à l'événement approprié (par exemple TextBox.TextChanged ou ComboBox.SelectedIndexChanged), c'est fastidieux mais ça marche. J'espère qu'il y a un moyen meilleur et plus facile de le faire dans WPF.

Répondre

2

événements routés:

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

Je ne comprends pas votre réponse. Le problème est que, en utilisant votre xaml, si j'ai une combobox dans ce UserControl, j'obtiendrai aussi l'événement UserControl_Click quand je clique simplement sur le bouton déroulant de la combobox. Comment puis-je empêcher cela? Pour une liste déroulante, je veux juste que l'événement SelectionChanged soit déclenché après que j'ai changé la sélection. – newman

+0

Supprimer l'événement ButtonBase.Click. Une autre méthode consiste à vérifier OriginalSource dans le gestionnaire. Par exemple, vous pouvez ajouter des noms aux boutons et comparer le nom de la source aux boutons autorisés. – vorrtex

0

Vous pouvez mettre ce contrôle pour valider la e.source en cas UserControl_Click pour gérer cette

If(e.Source.GetType()==typeof(Button)) 
{ 
    // your code 
} 
Questions connexes