C# MS UI自动化-AddAutomationHandler未启动
我正在使用Microsoft的UI自动化工具向文本框添加更改处理程序。代码如下:C# MS UI自动化-AddAutomationHandler未启动,c#,.net,ui-automation,microsoft-ui-automation,C#,.net,Ui Automation,Microsoft Ui Automation,我正在使用Microsoft的UI自动化工具向文本框添加更改处理程序。代码如下: // Get a reference to the textbox. var textbox = window.FindFirst( TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, Co
// Get a reference to the textbox.
var textbox = window.FindFirst(
TreeScope.Descendants,
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit)
);
// Bind a property change handler to the textbox -- this works great
Automation.AddAutomationPropertyChangedEventHandler(
textbox,
TreeScope.Element,
(o, e) => { Console.WriteLine("Textbox value property event"); },
ValuePattern.ValueProperty
);
//A different way of binding - why doesn't this fire?
Automation.AddAutomationEventHandler(
TextPatternIdentifiers.TextChangedEvent, // is this the right event?
textbox,
TreeScope.Element,
(o, e) => { Console.WriteLine("Text Changed Event (I want this to fire please)"); }
);
无论何时更改文本框,由Automation.AddAutomationPropertyChangedEventHandler
添加的事件处理程序都会正常启动,但由Automation.AddAutomationEventHandler
添加的事件处理程序不会启动
我必须在这里收听不同类型的活动吗?应该是哪个事件?您是否使用AccEvent SDK工具验证了TextChanged事件是由UI引发的?例如,我刚刚运行了AccEvent,并将其设置为报告记事本引发的TextChanged事件。下图显示了在我键入时引发的事件。当您在使用的UI中键入事件时,查看AccEvent是否会报告这些事件会很有趣。如果没有引发事件,则不会调用处理程序 谢谢 家伙
AccEvent工具确实非常有用。从可用性的角度来看,它当然还有改进的余地,但即使如此,它仍然可以帮助您准确地了解UI引发的UIA事件。这包括帮助您意识到,当您预期事件将被引发时,UI不会引发哪些事件。正如您所指出的,按钮在被调用时可能不会引发被调用的事件,这对您来说很尴尬。不幸的是,我不认为有一个很好的答案来解释为什么某些事件没有被提出。理想情况下,UI控件使用的UI框架将引发所有适当的事件。例如,我只是将AccEvent指向Run dlg上的OK按钮,并调用了该按钮。下面的屏幕截图显示,当我这样做时,调用的事件被引发 我敢打赌,编写Run dlg的人没有明确地做引发该事件的工作,所以平台的某些部分正在为dlg做这件事 另一方面,需要记住的是,当调用按钮时,按钮会立即消失(就像Run dlg上的OK按钮一样)。因此,如果您接收到调用的事件,然后尝试返回引发该事件的元素以获取有关该元素的更多详细信息,那么如果该元素不再存在,则该操作将失败。在这一点上,请求在引发事件时将有关元素的数据与事件一起缓存可能会有所帮助 类似地,如果我将AccEvent指向XAML应用程序中的一个按钮,则当我单击该按钮时会引发调用的事件,如下所示 但是如果UI框架(或者一些看起来像按钮的自定义UI)在按钮被调用时没有引发被调用的事件,那么您将无法执行任何操作来引发事件。UIA只是将数据和事件从UI传递到客户端代码,而UI可能不会引发事件。在这种情况下,我发现看看在我感兴趣的特定场景中引发了哪些事件是很有趣的。虽然我真正想要的事件可能不会被提出,但也许我可以对其他事件做出反应,以实现我的目标 谢谢
盖伊问你的问题:
我发现当
element.GetRuntimeId()
length为0
时,它没有启动,这就是为什么AddAutomationEventHandler
不适用于该元素的原因
我希望我能帮助你AccEvent工具非常有用!我以前不知道这件事。谢谢出于好奇-这些控件是否有任何原因不会触发特定类型的事件(例如,为什么按钮在单击时不会发出invokedEvent?)