Поскольку button.PerformClick()
в WPF нет метода, есть ли способ нажать кнопку WPF программным способом?
144
WPF использует немного иной подход, чем WinForms здесь. Вместо того, чтобы автоматизировать объект, встроенный в API, у них есть отдельный класс для каждого объекта, который отвечает за его автоматизацию. В этом случае вам нужно ButtonAutomationPeer
выполнить эту задачу.
ButtonAutomationPeer peer = new ButtonAutomationPeer(someButton);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();
Вот пост в блоге на эту тему.
Примечание: IInvokeProvider
интерфейс определен в UIAutomationProvider
сборке.
UIAutomationProvider
. Затем пришлось добавитьusing System.Windows.Automation.Peers; using System.Windows.Automation.Provider;
((IInvokeProvider) (new ButtonAutomationPeer(someButton).GetPattern(PatternInterface.Invoke)).Invoke();
IInvokeProvider
интерфейс определен вUIAutomationProvider
сборке.Как сказал JaredPar, вы можете обратиться к статье Джоша Смита, посвященной автоматизации. Однако, если вы посмотрите комментарии к его статье, вы найдете более элегантный способ поднять события против элементов управления WPF.
Я лично предпочитаю тот, что выше, а не пирам автоматизации.
источник
new RoutedEventArgs(Button.ClickEvent)
у меня не работает. Я должен был использоватьnew RoutedEventArgs(Primitives.ButtonBase.ClickEvent)
. В остальном прекрасно работает!если вы хотите вызвать событие клика:
И если вы хотите, чтобы кнопка выглядела так, как будто она нажата:
и после этого отжатый:
или используйте ToggleButton
источник
источник
Один из способов программно «щелкнуть» по кнопке, если у вас есть доступ к источнику, - просто вызвать обработчик события OnClick кнопки (или выполнить ICommand, связанный с кнопкой, если вы делаете что-то более в духе WPF-y). ).
Почему вы это делаете? Например, вы выполняете какое-то автоматическое тестирование или пытаетесь выполнить то же действие, которое выполняет кнопка из другого раздела кода?
источник
Как сказал Грег Д. , я думаю, что альтернативой
Automation
щелчку по кнопке с использованием шаблона MVVM (возникновение события щелчка и выполнение команды) является вызовOnClick
метода с использованием отражения:источник
При использовании шаблона команды MVVM для функции « Кнопка» (рекомендуемая практика) простой способ вызвать эффект « Кнопка» заключается в следующем:
При этом будет использоваться объект Command, который запускает кнопка, и передавать параметр CommandParameter, определенный в XAML .
источник
Проблема с решением Automation API заключается в том, что для него требовалась ссылка на сборку Framework
UIAutomationProvider
как зависимость проекта / пакета.Альтернатива - подражать поведению. Ниже приведено мое расширенное решение, которое также учитывает MVVM-шаблон с его связанными командами, реализованными как метод расширения :
источник