2015-04-22 2 views
0

Nous avons un contrôle simple qui hérite d'un RadioButton. Je voudrais vérifier par programme.WPF RadioButton Cliquez avec RaiseEvent

Si c'était un bouton que nous aurions cliqué normalement.

Button MyButton = ... 
MyButtonClickArgs = new RoutedEventArgs(Button.ClickEvent, MyButton); 
MyButton.RaiseEvent(MyButtonClickArgs); 

Alors j'ai pensé que je pourrais faire ce qui suit avec un RadioButton.

RadioButton MyButton = ... 
MyButtonClickArgs = new RoutedEventArgs(RadioButton.CheckedEvent, MyButton); 
MyButton.RaiseEvent(MyButtonClickArgs); 

Cependant, pas de chance. Tout le monde sait ce que je fais mal.

Mise à jour: Une exploration plus poussée indique que le gestionnaire d'événements OnChecked est appelé. Cependant l'état IsChecked est faux (donc il ne fait pas ce que je l'attendais). Si IsChecked est faux, je m'attendrais à ce qu'il soit vrai au moment où le gestionnaire d'événements est appelé. Au moins c'est le comportement si je clique physiquement sur le bouton.

+1

Il devrait fonctionner. Qu'est-ce qui ne va pas? Ne recevez-vous pas l'événement? Pouvez-vous afficher le code de votre gestionnaire d'événements? –

+0

@PraveenPaulose Le gestionnaire d'événements est appelé, mais pas dans l'état attendu. Voir la question mise à jour. – denver

Répondre

1

Dans votre exemple, vous ne faites que déclencher un événement. Le déclenchement de l'événement ne définit pas automatiquement la valeur du bouton radio sur IsChecked: true. Votre exemple de clic sur un bouton est correct, mais dans le cas d'un bouton radio, vous n'avez pas besoin de déclencher l'événement explicitement. Vous pouvez définir directement la propriété IsChecked = true

radioButton.IsChecked = true; 

Cela va vérifier le bouton radio et de déclencher votre événement d'appeler votre gestionnaire d'événements enregistrés. Lorsque vous vérifiez physiquement le bouton, sous les hottes, il définit la propriété IsChecked et ne déclenche pas seulement l'événement.

Ajout des sections pertinentes du code source Bouton radio de WPF

/// <summary> 
/// This override method is called from OnClick(). 
/// RadioButton implements its own toggle behavior 
/// </summary> 
protected internal override void OnToggle() 
{ 
    IsChecked = true; 
} 

Radion Button Source Code

+0

Pas tout à fait ce que je cherche. Je ne cherche pas à changer manuellement l'état de vérification, je cherche à simuler un utilisateur qui le fait. C'est dans un code de test. Différence subtile – denver

+0

@denver Simplement expliquer le comportement du framework conçu et suggérer une alternative –

+0

@denver Ajout d'une source relvant de WPF montrant comment elle est gérée depuis le code source du contrôle. –