SelectionItemPattern
支持SelectionItemPattern的 控件有ListView、ListBox、RadioButton、GridView等。
1. SelectionItemPattern的三个重要方法:
1. AddToSelection:将当前元素添加到所选项的集合。
2. RemoveFromSelection: 从选定项的集合中移除当前元素。
3. Select: 取消所有已选中的项,然后选择当前元素。
2. SelectionItemPattern的Current属性
可通过Current属性的IsSelected属性来判断AutomationElement是否被selected.
如下代码演示了使用SelectionItemPattern来操作RadioButton控件。
复制代码
以下代码为XAML:
复制代码
本文简单介绍了SelectionItemPattern以及使用SelectionItemPattern来操作RadioButton。(文/
开着拖拉机)
支持SelectionItemPattern的 控件有ListView、ListBox、RadioButton、GridView等。
1. SelectionItemPattern的三个重要方法:
1. AddToSelection:将当前元素添加到所选项的集合。
2. RemoveFromSelection: 从选定项的集合中移除当前元素。
3. Select: 取消所有已选中的项,然后选择当前元素。
2. SelectionItemPattern的Current属性
可通过Current属性的IsSelected属性来判断AutomationElement是否被selected.
如下代码演示了使用SelectionItemPattern来操作RadioButton控件。
- 1using System;
- 2using System.Text;
- 3using System.Diagnostics;
- 4using System.Threading;
- 5using System.Windows.Automation;
- 6
- 7namespace UIATest
- 8{
- 9 class Program
- 10 {
- 11 static void Main(string[] args)
- 12 {
- 13 Process process = Process.Start(@"F:\CSharpDotNet\AutomationTest\ATP\WpfApp\bin\Debug\WpfApp.exe");
- 14 int processId = process.Id;
- 15
- 16 AutomationElement element = FindElementById(processId, "radioButton1");
- 17 SelectionItemPattern selectionItemPattern = GetSelectionItemPattern(element);
- 18 selectionItemPattern.Select();
- 19 }
- 20
- 21 /** <summary>
- 22 /// Get the automation elemention of current form.
- 23 /// </summary>
- 24 /// <param name="processId">Process Id</param>
- 25 /// <returns>Target element</returns>
- 26 public static AutomationElement FindWindowByProcessId(int processId)
- 27 {
- 28 AutomationElement targetWindow = null;
- 29 int count = 0;
- 30 try
- 31 {
- 32 Process p = Process.GetProcessById(processId);
- 33 targetWindow = AutomationElement.FromHandle(p.MainWindowHandle);
- 34 return targetWindow;
- 35 }
- 36 catch (Exception ex)
- 37 {
- 38 count++;
- 39 StringBuilder sb = new StringBuilder();
- 40 string message = sb.AppendLine(string.Format("Target window is not existing.try #{0}", count)).ToString();
- 41 if (count > 5)
- 42 {
- 43 throw new InvalidProgramException(message, ex);
- 44 }
- 45 else
- 46 {
- 47 return FindWindowByProcessId(processId);
- 48 }
- 49 }
- 50 }
- 51
- 52
- 53 /** <summary>
- 54 /// Get the automation element by automation Id.
- 55 /// </summary>
- 56 /// <param name="windowName">Window name</param>
- 57 /// <param name="automationId">Control automation Id</param>
- 58 /// <returns>Automatin element searched by automation Id</returns>
- 59 public static AutomationElement FindElementById(int processId, string automationId)
- 60 {
- 61 AutomationElement aeForm = FindWindowByProcessId(processId);
- 62 AutomationElement tarFindElement = aeForm.FindFirst(TreeScope.Descendants,
- 63 new PropertyCondition(AutomationElement.AutomationIdProperty, automationId));
- 64 return tarFindElement;
- 65 }
- 66
- 67 SelectItemPattern#region SelectItemPattern
- 68
- 69 /** <summary>
- 70 /// Get SelectItemPattern
- 71 /// </summary>
- 72 /// <param name="element">AutomationElement instance</param>
- 73 /// <returns>SelectItemPattern instance</returns>
- 74 public static SelectionItemPattern GetSelectionItemPattern(AutomationElement element)
- 75 {
- 76 object currentPattern;
- 77 if (!element.TryGetCurrentPattern(SelectionItemPattern.Pattern, out currentPattern))
- 78 {
- 79 throw new Exception(string.Format("Element with AutomationId '{0}' and Name '{1}' does not support the SelectionItemPattern.",
- 80 element.Current.AutomationId, element.Current.Name));
- 81 }
- 82 return currentPattern as SelectionItemPattern;
- 83 }
- 84
- 85 #endregion
- 86 }
- 87}
- 88
- 1<Window x:Class="WpfApp.Window1"
- 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- 4 Title="Window1" Height="219" Width="353">
- 5 <Grid>
- 6 <RadioButton Height="16" HorizontalAlignment="Right" Margin="0,46,10,0" Name="radioButton1" VerticalAlignment="Top" Width="120">RadioButton</RadioButton>
- 7 </Grid>
- 8</Window>
- 9