0

GetPattern()方法的实现是WPF UI Automation system采用 enum 参数实现的PatternInterface,我们通常以如下方式使用它:

//Code with original implementation
ButtonAutomationPeer buttonPeer = new ButtonAutomationPeer(button1);
IInvokeProvider provider = (IInvokeProvider)buttonPeer.GetPattern(PatternInterface.Invoke); //Line in Question
//To invoke the click event of button we then use the following code:
provider.Invoke();

从上面的代码来看,Question中带有注释 Line 的行似乎不是强类型的,我们需要将GetPattern()方法的返回值强制转换为所需的接口,然后使用它来调用特定的 UI 自动化。

问题是: 如果使用.Net Framework 中已经存在的GetPattern()方法实现如下,会不会更好:WPFGenerics

public T GetPattern<T>;
  • 在哪里,然后我会在调用该方法时传递所需的接口模式名称,GetPattern<T>并获得该接口实例的强类型,并且也不需要castGetPattern()微软在方法的原始实现中给出了什么想法 enum
  • 在方法参数中使用枚举不会破坏GetPattern()原始实现的可维护性。我会说,当需要支持新的 Control 接口模式时,需要将该模式接口的枚举值添加到名为PatternInterface

我想调用方法并使用以下使用调用通用实现的新代码获取接口模式会更容易和更好:

//Code with New Generics based implementation
ButtonAutomationPeer buttonPeer = new ButtonAutomationPeer(button1);
IInvokeProvider provider = buttonPeer.GetPattern<IInvokeProvider>(); //Line in Question
//To invoke the click event of button we then use the following code:
provider.Invoke();
4

1 回答 1

2

这是出于通常的原因:他们没有时间机器。从参考源提供的源代码文件中的“历史”注释中可以看出,UI 自动化类的工作始于 2003 年 6 月左右,有证据表明它是从早期工作中派生的。仿制药直到 2005 年才出现。

从 dd/wpf/src/UIAutomation/UIAutomationTypes/System/Windows/AutomationPattern.cs:

// History:
//  06/02/2003 : BrendanM Ported to WCP

这很可能是布伦丹·麦基恩。对“WCP”可能意味着什么没有像样的猜测。

于 2012-06-17T17:47:02.463 回答