使用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();
谢谢。
答案 0 :(得分:1)
tab.SetFocus()
tab.GetSupportedPatterns()
),然后查看此选项卡实现支持哪些模式。它应该支持SelectionItemPattern,因此请使用:((SelectionItemPattern)tab.GetCurrentPattern(SelectionItemPattern.Pattern)).Select()
SendKeys
以浏览标签(大多数情况下都会有热键在它们之间导航。您可以在每次导航后检查是否选中了标签。答案 1 :(得分:1)
在向选项卡项添加热键时,我遇到了类似的问题。在我的情况下,仅选择选项卡项目将使其具有焦点,但在动态生成选项卡时不会显示其内容。除非我误解了您的问题,否则本示例将模拟使用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