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上:它不清楚命令何時使用綁定執行,但觸發器增加了一些清晰度,並且消除了我在下次看代碼。