以下是我在Inspect工具中的控制视图,我试图从树下的Text-Block返回值:
在我的WPF窗口应用程序中,数据网格具有行和列,并尝试获取特定行和列的文本值。第一行的文本值(timestamp)为子树下的Text-Block。
检查控制属性是:
datagrid - Datagrid
Log - DataItemControlType
Item - UIA_CustomControlType(DataGridCell)
自定义 - UIA_CustomControlType(DataGridCell)
text - UIA_TextControlTypeID
我可以获得总行数但无法获取文本值。
var gridChilds = grid.LowLevelAutomationObject.FindAll(System.Windows.Automation.TreeScope.Children, Condition.TrueCondition).OfType<AutomationElement>();
var rows = gridChilds.Count() ;
List<AutomationElement> messages = new List<AutomationElement>();
TreeWalker walker = new TreeWalker(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem));
AutomationElement ae = grdControl as AutomationElement;
AutomationElement row = walker.GetFirstChild(ae);
messages.Add(row);
row = walker.GetNextSibling(row);
string result = Convert.ToString(row);
return result ;
我尝试了一些来自在线帮助的类似问题的解决方案,但没有一个适用于我的例子。我是C#编码和工具的新手,所以任何帮助都将不胜感激。
答案 0 :(得分:0)
从查看屏幕截图来看,您看起来想要单元格的名称属性。所以代码看起来像这样。我从你的网格控件开始,我还假设这些行的类名为&#34; Record&#34;因为网格中的大多数行的类名称为&#34;记录&#34;。
AutomationElement dataGrid = grdControl as AutomationElement;
AutomationElement outerRow = dataGrid.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "Record"));
AutomationElement innerRow = outerRow.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "Record"));
AutomationElement custom = innerRow.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "custom"));
AutomationElement text = custom.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.LocalizedControlTypeProperty, "text"));
return text.Name;