1

Dans Silverlight, les contrôles Button et RadioButton ont un événement Click, car ils héritent de System.Windows.Controls.Primitives.ButtonBase.Silverlight: Simuler l'événement Click RadioButton à l'aide de UI Automation?

Si nous voulons simuler cet événement Click pour un Button, nous pouvons utiliser la classe ButtonAutomationPeer, comme si (donné un bouton appelé myButton):

ButtonAutomationPeer peer = new ButtonAutomationPeer(myButton); 
IInvokeProvider ip = (IInvokeProvider)peer; 
ip.Invoke(); 

Cependant, quand nous essayons de faire la même chose pour un RadioButton, nous découvrons que la classe RadioButtonAutomationPeer n'implémente pas IInvokeProvider (donc nous ne pouvons pas appeler Invoke()). Y a-t-il un autre moyen de déclencher l'événement Click pour un RadioButton?

Répondre

0

Essayez ceci:

RadioButtonAutomationPeer peer = new RadioButtonAutomationPeer(myRadioButton); 
IToggleProvider tp = (IToggleProvider) peer; 
while (tp.ToggleState != targetToggleState) 
{ 
    tp.Toggle(); 
} 

Vous aurez besoin de connaître votre état de bascule désiré (On, Off ou indéterminés). Ou si vous voulez juste basculer dans un autre état, frappez la boucle while, appelez simplement Toggle.

De toute évidence, ce n'est pas exactement la même chose qu'un clic. Si vous avez lié le bouton radio à une commande, vous pourriez être obligé d'être un peu plus explicite et faire quelque chose comme ceci pour obtenir votre automatisation au travail:

<RadioButton ... (don't set the Command property)> 
    <i:Interaction.Triggers> 
    <i:EventTrigger EventName="Checked"> 
     <i:InvokeCommandAction Command="{Binding MyCommand}" /> 
    </i:EventTrigger> 
    </i:Interaction.Triggers> 
</RadioButton> 

Utilisation du SDK Blend (qui est le « i : "xmlns), vous appelez une commande lorsque le contrôle RadioButton est activé. Personnellement, je ferais cette approche même sans automatisation au lieu de lier une commande à un RadioButton: on ne sait pas quand la commande s'exécute avec une liaison, mais les déclencheurs ajoutent une certaine clarté et enlèvent le besoin de penser la prochaine fois que je regarde le code.