Поскольку в WPF нет метода button.PerformClick()
, есть ли способ щелкнуть по кнопке WPF программно?
Как программно нажать кнопку в 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.