给定2个应用程序:
- 1 WPF应用程序,并非所有控件都有 AutomationId,我无法更改。此外,应用程序在运行时添加控件而不设置 AutomationId。
- 1 个自动执行上述 WPF 应用程序的控制台应用程序
我需要它,因为我想在几乎相同的时间内访问所有元素。(在使用之前搜索自动化元素的时间似乎有很大不同(从毫秒到秒) - 取决于元素/和树层的数量)
我想在 WPF 运行时在控制台应用程序中设置 WPF 控件的 AutomationIds。很高兴知道,如果你能想到任何解决这个问题的方法!
我到目前为止所尝试的:
1.) 反思
Type type = element.GetType();
FieldInfo fi = type.GetField("AutomationIdProperty");
fi.SetValue(element, "x"); //Error
错误消息:“'System.String' 类型的对象无法转换为'System.Windows.Automation.AutomationProperty' 类型”但我想交出一个值,而不是属性类型......
如果我改用以下内容,则不会引发错误,但不会更改 XAML
fi.SetValue(element, AutomationElement.AutomationIdProperty);
2.)直接
AutomationElement element; // = my AutomationElement
element.Current.AutomationId = "x"; //since AutomationId is Readonly - its not possible
3.) DependencyObjects和DependencyProperties似乎也很有希望,但到目前为止我还没有提出解决方案。有人有这方面的经验吗??