1

我有以下代码在 DataGridCell 上引发 MouseLeftButtonDownEvent。

DataGridCell dataGridCell = cell as DataGridCell;
MouseButtonEventArgs someEventArgs = 
    new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left);
someEventArgs.RoutedEvent = DataGridCell.MouseLeftButtonDownEvent;
dataGridCell.RaiseEvent(someEventArgs);

它工作正常,并且单元格被选中。但是,我现在正尝试使用 AutomationPeer 来做同样的事情,但我一直无法找到一种方法来做同样的事情。

是否可以使用 AutomationPeers 来做到这一点?如果是,我该怎么做?

注意:我需要它来引发 MouseDownEvent,而不是 Click 事件。

谢谢

4

1 回答 1

2

简短的回答是否定的:

存在 AutomationPeer 类以允许 WPF 类实现与 UIAutomation 相关的接口,以便 UIAutomation 客户端 - 例如。屏幕阅读器和高级(ish)级自动化 UI 测试可以使用它们。这些接口通常比鼠标或键盘输入更高级别,而是处理诸如选择或选定状态之类的概念。

因此,如果某些测试代码使用 UIAutomation 的 InvokeProvider.Invoke() 方法按下按钮,AutomationPeer 甚至会在按钮上引发 Click,所以它就像按下按钮一样,但不会有任何鼠标或键盘涉及输入 - 没有鼠标事件,也没有键盘事件。

一般来说,UIAutomation 用于自动化其他应用程序,而 ...Peer 类仅用于向 UIAutomation 基础架构公开功能;在您自己的代码中实际调用这些类是非常罕见的。

于 2011-12-20T06:39:51.187 回答