Отправка кликов в AutomationElement без InvokePattern

С помощью AutomationElementЕсть ли способ отправить клики на TabItem без необходимости перемещать мышь и симулировать щелчки? AutomationElement для меня все еще ново - насколько я понимаю, если только он не поддерживает InvokePattern (что TabItem не делает), вы должны идти по пути определения местоположения элемента управления и моделирования мыши. У меня есть этот код работает (см. Ниже) - мне просто любопытно, если это мой вариант.

AutomationElement tabControl = GetControl(window, "NOTEBOOK");
AutomationElement tabGeneral = GetControl(tabControl, "FM_STAFF_SUB_P1");

AutomationElementCollection tabs = GetAllTabs(window, tabGeneral);

System.Windows.Point p = tabs[1].GetClickablePoint();

MoveMouse((int)p.X, (int)p.Y);
ClickMouse();

Спасибо.

1 ответ

Решение
  1. Пытаться tab.SetFocus()
  2. Получить все поддерживаемые шаблоны (tab.GetSupportedPatterns()), а затем посмотрите, какие из них поддерживаются для реализации этой вкладки. Он должен поддерживать SelectionItemPattern, поэтому используйте: ((SelectionItemPattern)tab.GetCurrentPattern(SelectionItemPattern.Pattern)).Select()
  3. использование SendKeys к окну, чтобы перемещаться по вкладкам (в большинстве случаев имеется горячая клавиша для перемещения между ними. Вы можете комбинировать, проверяя после каждой навигации, выбрана ли вкладка.
  4. Если все вышеперечисленное не сработало, я думаю, щелчок мышью - единственный вариант.

У меня была аналогичная проблема с добавлением горячих клавиш к элементам вкладок. В моем случае простой выбор элемента вкладки даст ему фокус, но не покажет содержимое вкладки, когда оно было динамически сгенерировано. Если я не правильно понял ваш вопрос, в этом примере будет имитироваться щелчок по элементу вкладки с помощью TabItemAutomationPeer.

        //get the TabItem
      TabItem tabItem = (TabItem)sender; //or however you are getting it.
    
        //get the TabControl
      TabControl tabControl = UIHelper.FindLogicalParent<TabControl>(tabItem); //or however you are getting it.
      
        //do that magic
      tabItem.IsSelected = true; 
      TabControlAutomationPeer tabControlAutomationPeer = new TabControlAutomationPeer(tabControl);
      TabItemAutomationPeer tabItemAutomationPeer = new TabItemAutomationPeer(tabItem, tabControlAutomationPeer);
      tabItemAutomationPeer.SetFocus(); //works like a click
Другие вопросы по тегам