2

我正在为 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

检查元素是否支持值模式(显然它支持...),并且:

使用自动化框架在文本字段/文本框上设置文本并获取更改事件

在此先感谢并为我的英语感到抱歉。

4

0 回答 0