Как программно нажать кнопку в WPF?

Поскольку в WPF нет метода button.PerformClick(), есть ли способ щелкнуть по кнопке WPF программно?

Ответ 1

WPF использует немного иной подход, чем WinForms здесь. Вместо автоматизации объекта, встроенного в API, у них есть отдельный класс для каждого объекта, который отвечает за его автоматизацию. В этом случае вам нужен ButtonAutomationPeer для выполнения этой задачи.

ButtonAutomationPeer peer = new ButtonAutomationPeer(someButton);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();

Вот пост в блоге на эту тему.

Примечание. Интерфейс IInvokeProvider определен в сборке UIAutomationProvider.

Ответ 2

Как и JaredPar, вы можете обратиться к статье Джоша Смита "Автоматизация". Однако, если вы просмотрите комментарии к своей статье, вы найдете более элегантный способ повышения событий против элементов управления WPF.

someButton.RaiseEvent(new RoutedEventArgs(ButtonBase.ClickEvent));

Я лично предпочитаю вышеперечисленное вместо автоматических сверстников.

Ответ 3

если вы хотите вызвать событие click:

SomeButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));

И если вы хотите, чтобы кнопка выглядела так, как будто она нажата:

typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(SomeButton, new object[] { true });

и не нажата после этого:

typeof(Button).GetMethod("set_IsPressed", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(SomeButton, new object[] { false });

или используйте ToggleButton

Ответ 4

this.PowerButton.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));

Ответ 5

Один из способов программной "click" кнопки, если у вас есть доступ к источнику, - это просто вызвать кнопку обработчика события OnClick (или выполнить ICommand, связанную с кнопкой, если вы делаете что-то в более WPF -y образом).

Зачем ты это делаешь? Например, выполняете ли вы какое-то автоматическое тестирование или пытаетесь выполнить те же действия, что и кнопка из другого раздела кода?

Ответ 6

Как Greg D, я думаю, что альтернативой Automation для нажатия кнопки с использованием шаблона MVVM (щелчок события поднят и выполненная команда) - вызов метод OnClick с использованием отражения:

typeof(System.Windows.Controls.Primitives.ButtonBase).GetMethod("OnClick", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(button, new object[0]);

Ответ 7

При использовании шаблона команды MVVM для функции " Кнопка" (рекомендуемая практика) простой способ вызвать эффект " Кнопка" заключается в следующем:

someButton.Command.Execute(someButton.CommandParameter);

Это будет использовать объект Command, который запускает кнопка, и передавать CommandParameter, определенный XAML.