首页 > 代码库 > Server-Side UI Automation Provider - WPF Sample

Server-Side UI Automation Provider - WPF Sample

Server-Side UI Automation Provider - WPF Sample

2014-09-14

引用程序集

自动化对等类

WPF Sample

参考

 

引用程序集


 返回 

  • UIAutomationProviders.dll
  • UIAutomationTypes.dll 
  • WindowsBase.dll

自动化对等类[1]


 返回

WPF 控件通过派生自 AutomationPeer 的对等类的树来支持 UI 自动化。  按照约定,对等类的名称须以控件类的名称开头,并以“AutomationPeer”结尾。 例如,ButtonAutomationPeer 是 Button 控件类的对等类。 这些对等类基本等效于 UI 自动化控件类型,但专用于 WPF 元素。 通过 UI 自动化接口访问 WPF 应用程序的自动化代码不直接使用自动化对等类,但同一进程空间中的自动化代码可以直接使用自动化对等类。

图1 ButtonAutomationPeer metadata

WPF Sample[2]


 返回

示例代码如下:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Data; 8 using System.Windows.Documents; 9 using System.Windows.Input;10 using System.Windows.Media;11 using System.Windows.Media.Imaging;12 using System.Windows.Navigation;13 using System.Windows.Shapes;14 using System.Windows.Automation.Peers;15 using System.Windows.Automation.Provider;16 namespace WpfServerProvider17 {18     /// <summary>19     /// Interaction logic for MainWindow.xaml20     /// </summary>21     public partial class MainWindow : Window22     {23         public MainWindow()24         {25             InitializeComponent();26             UIAButton btn = new UIAButton();27             btn.Content = "TestButton";28             this.Content = btn;29         }30     }31     //My WPF button class, derive from WPF Button class32     public class UIAButton : Button33     {34         //Override this function to return my derived AutomationPeer class35         protected override AutomationPeer OnCreateAutomationPeer()36         {37             return new UIAButtonAutomationPeer(this);38         }39     }40     //My AutomationPeer class41     //Add implementation of UI ValuePattern comparing with base implementation    42     public class UIAButtonAutomationPeer : ButtonAutomationPeer, IValueProvider43     {44         //owner parameter is the WPF Button instance45         public UIAButtonAutomationPeer(Button owner)46             : base(owner)47         {48         }49         //Return UIA Name property50         protected override string GetNameCore()51         {52             string originalName = base.GetNameCore();53             return string.Format("{0} {1}", originalName, DateTime.Now.ToLongTimeString());54         }55         //Return ValuePattern interface        56         public override object GetPattern(PatternInterface patternInterface)57         {58             if (patternInterface == PatternInterface.Value)59             {60                 return this;61             }62             return null;63         }64         public bool IsReadOnly { get { return true; } }65         //ValuePattern‘s implementation66         public string Value67         {68             get69             {70                 return string.Format("Height={0},Wideth={1}",71                     Owner.RenderSize.Height, Owner.RenderSize.Width);72             }73         }74         public void SetValue(string value) { }75     }76 }
View Code

图2 UISpy to WPF provider sample

参考

[1] WPF 自定义控件的 UI 自动化
[2] UI Automation -- Under the Hood

 

Server-Side UI Automation Provider - WPF Sample