Silverlight: имитировать событие нажатия кнопки RadioButton с помощью автоматизации пользовательского интерфейса? - PullRequest
2 голосов
/ 10 декабря 2011

В Silverlight элементы управления Button и RadioButton имеют событие Click, поскольку они наследуются от System.Windows.Controls.Primitives.ButtonBase.

Если мы хотим смоделировать это Click событие для Button, мы можем использовать класс ButtonAutomationPeer, например, (при наличии кнопки с именемmyButton):

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

Однако, когда мы пытаемся сделать то же самое для RadioButton, мы обнаруживаем, что класс RadioButtonAutomationPeer не реализует IInvokeProvider(поэтому мы не можем позвонить Invoke()).Есть ли другой способ вызвать событие Click для RadioButton?

1 Ответ

0 голосов
/ 11 декабря 2011

Попробуйте это:

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

Вам необходимо знать желаемое состояние переключения (Вкл., Выкл. Или Неопределенный). Или, если вы просто хотите переключиться в другое состояние, включите цикл while, просто вызовите 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>

Используя Blend SDK (это «i:» xmlns), вы вызываете команду при проверке RadioButton. Лично я бы применил этот подход даже без автоматизации, а просто связал команду с RadioButton: неясно, когда команда выполняется с привязкой, но триггеры добавляют некоторую ясность и избавляют меня от необходимости думать в следующий раз, когда я смотрю на код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...