无法访问控制模式的controlType.Text嵌套在DataGrid / DataItem中

时间:2014-04-16 15:29:34

标签: c# wpf datagrid

我正在尝试使用System.Windows.Automation在controlType.dataGrid中选择一行。 Row是一个controlType.Text。我试图搜索任何方式如何获取其模式并调用pattern.Select()函数,但没有成功。任何人都可以给我一个提示怎么做?感谢

选择DataGrid:

AutomationElement dataGrid = routeDetailOpt.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "m_RouteListView"));

选择行本身:

AutomationElement rowToSelect = dataGrid.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem));

选择“cell”以便我可以获取其模式并调用Select():

AutomationElement rowHeader = rowToSelect.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Text));

获取模式:

SelectionItemPattern pattern = rowHeader.GetCurrentPattern(SelectionItemPattern.Pattern) as SelectionItemPattern;

我收到以下错误:

“” * .dll中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理

其他信息:不支持的模式。 “”

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

经过长时间的斗争,我们找到了解决方案。

事实证明,我们需要做的就是在dataGrid项目上调用“SetFocus()”,这一切都运行得很好! (不要问我为什么从一开始就没有焦点)

仅供参考,我使用rowToSelect进行实际选择,而不是使用rowHeader

SelectionItemPattern pattern = rowToSelect.GetCurrentPattern(SelectionItemPattern.Pattern) as SelectionItemPattern;
pattern.Select();