1

在Silverlight中,​​和RadioButton控件都有Click事件,因为它们从System.Windows.Controls.Primitives.ButtonBase继承。Silverlight:使用UI自动化模拟RadioButton Click事件?

如果我们要模拟这一Click事件的Button,我们可以使用ButtonAutomationPeer类,像这样(给定一个名为myButton按钮):

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

然而,当我们试图做同样的事情对于RadioButton,我们发现RadioButtonAutomationPeer类不执行IInvokeProvider(所以我们不能拨打Invoke())。是否有其他方式可以导致RadioButtonClick事件被解雇?

回答

0

试试这个:

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

你需要知道你想要的切换状态(开,关,或不确定)。或者如果你只是想切换到不同的状态,只需调用Toggle即可。

显然这不像点击一样。如果你已经绑定的单选按钮,一个命令,你可能会被迫一点更加明确,做这样的事情,让您的自动化工作:

<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> 

使用混合SDK(这是“我:“xmlns),你在调用RadioButton时调用一个命令。就我个人而言,即使没有自动化,我也会这么做,而不仅仅是将一个命令绑定到一个RadioButton上:它不清楚命令何时使用绑定执行,但触发器增加了一些清晰度,并且消除了我在下次看代码。