支持SelectionItemPattern的控件有ListView、ListBox、RadioButton、GridView等。
1. SelectionItemPattern的三个重要方法:
1. AddToSelection:将当前元素添加到所选项的集合。
2. RemoveFromSelection: 从选定项的集合中移除当前元素。
3. Select: 取消所有已选中的项,然后选择当前元素。
2. SelectionItemPattern的Current属性
可通过Current属性的IsSelected属性来判断AutomationElement是否被selected.
如下代码演示了使用SelectionItemPattern来操作RadioButton控件。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
using System;
2
using System.Text;
3
using System.Diagnostics;
4
using System.Threading;
5
using System.Windows.Automation;
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
namespace UIATest
8![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
9
class Program
10![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
11
static void Main(string[] args)
12![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
Process process = Process.Start(@"F:\CSharpDotNet\AutomationTest\ATP\WpfApp\bin\Debug\WpfApp.exe");
14
int processId = process.Id;
15![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
AutomationElement element = FindElementById(processId, "radioButton1");
17
SelectionItemPattern selectionItemPattern = GetSelectionItemPattern(element);
18
selectionItemPattern.Select();
19
}
20![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
21![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
28
AutomationElement targetWindow = null;
29
int count = 0;
30
try
31![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
32
Process p = Process.GetProcessById(processId);
33
targetWindow = AutomationElement.FromHandle(p.MainWindowHandle);
34
return targetWindow;
35
}
36
catch (Exception ex)
37![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
43
throw new InvalidProgramException(message, ex);
44
}
45
else
46![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
47
return FindWindowByProcessId(processId);
48
}
49
}
50
}
51![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
53![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
61
AutomationElement aeForm = FindWindowByProcessId(processId);
62
AutomationElement tarFindElement = aeForm.FindFirst(TreeScope.Descendants,
63
new PropertyCondition(AutomationElement.AutomationIdProperty, automationId));
64
return tarFindElement;
65
}
66![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
67![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
SelectItemPattern#region SelectItemPattern
68![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
69![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <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![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
76
object currentPattern;
77
if (!element.TryGetCurrentPattern(SelectionItemPattern.Pattern, out currentPattern))
78![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
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![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
85
#endregion
86
}
87
}
88![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
以下代码为XAML:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
本文简单介绍了SelectionItemPattern以及使用SelectionItemPattern来操作RadioButton。