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

Я никогда не использовал эту библиотеку, но согласно документации , вы должны фактически передать данные изображения в addImage.

Есть несколько способов справиться с этим. Один из них - взять экземпляр Image, нарисовать его на холсте, кодировать данные растрового изображения холста как PNG, а затем кодировать вывод PNG в base64. Это то, что говорится в документации.

Есть другой способ. Вы можете использовать Fetch API. Не проверено, но что-то вроде:

fetch('/assets/img/bgconfidential.png')
  .then(res => res.blob())
  .then((blob) => {
    const reader = new FileReader();
    reader.addEventListener('load', () => {
      doc.addImage(reader.result, 'png', ...);
    });
    reader.readAsDataURL(blob);
  });

135
задан Xam 6 May 2019 в 04:33
поделиться

3 ответа

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

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

Вот сообщение в блоге на предмете.

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

122
ответ дан 23 November 2019 в 23:43
поделиться

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

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

5
ответ дан 23 November 2019 в 23:43
поделиться

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

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

. Я лично предпочитаю приведенный выше вместо пиров автоматизации.

179
ответ дан 23 November 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: