我正在为 Microsoft Word 开发 UI 自动化应用程序,对于 RichEdit 文本框,我需要通过方法“AddAutomationPropertyChangedEventHandler”通过特定处理程序捕获“AutoAddAutomationPropertyChanged”事件。我有代表 RichEdit 控件的 AutomationElement“元素”,并在我的类中添加了事件:
Automation.AddAutomationPropertyChangedEventHandler(element, TreeScope.Subtree, OnPropertyChanged, new[] { ValuePattern.ValueProperty });
我的处理程序是:
private void OnPropertyChanged(object sender, AutomationPropertyChangedEventArgs e)
{
if (e.Property == ValuePattern.ValueProperty)
{
...code...
}
}
问题是,如果我在“RichEdit20W”类型的 RichEdit 上执行此代码,它会起作用并捕获事件,进入 OnPropertyChanged 处理程序方法。我的问题是在 RICHED60W 文本控件上执行此代码:似乎从未从 Richedit60w 文本控件触发该事件,因此我无法捕获它来执行我的处理程序代码。
例如,在 Microsoft Word 2010 中,如果我使用“查找和替换”窗口的 RichEdit 控件执行此代码,它会起作用并执行处理程序代码。相反,如果我使用 Word 应用程序主窗口左侧的 RichEdit 文本控件执行代码,这是一个 RICHEDIT60W(“导航”窗格,使用 CTRL + F 打开,我使用Inspect.exe工具检查它),它不起作用,并且永远不会执行处理程序代码。我很困惑,因为如果我尝试使用Windows SDK 提供的Accevent.exe工具在 RICHEDIT60W 上捕获相同的属性值更改事件,该工具将正常工作并显示事件信息。
我尝试了一切,即使在方法上使用 TreeScope.Element 和 TreeScope.Children 参数,但没有任何反应。
我遵循这个: http: //msdn.microsoft.com/en-us/library/system.windows.automation.valuepattern.valueproperty (v=vs.110).aspx
检查元素是否支持值模式(显然它支持...),并且:
在此先感谢并为我的英语感到抱歉。