ExpandCollapsePattern
表示以可视方式进行展开(以显示内容)和折叠(以隐藏内容)的控件。例如ComboBox控件支持ExpandCollapsePattern。
ExpandCollapsePattern有两个主要方法:
Expand()方法:隐藏 AutomationElement 的全部子代节点、控件或内容。
Collapse()方法:显示 AutomationElement 的全部子节点、控件或内容。
以下代码是用
ExpandCollapsePattern来测试ComboBox控件的Expand和Collapse。

Code
using System;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Windows.Automation;

namespace UIATest


{
class Program

{
static void Main(string[] args)

{
Process process = Process.Start(@"F:\CSharpDotNet\AutomationTest\ATP\WpfApp\bin\Debug\WpfApp.exe");
int processId = process.Id;
AutomationElement element = FindElementById(processId, "comboBox1");
ExpandCollapsePattern currentPattern = GetExpandCollapsePattern(element);
currentPattern.Expand();
Thread.Sleep(1000);
currentPattern.Collapse();
}


/**//// <summary>
/// Get the automation elemention of current form.
/// </summary>
/// <param name="processId">Process Id</param>
/// <returns>Target element</returns>
public static AutomationElement FindWindowByProcessId(int processId)

{
AutomationElement targetWindow = null;
int count = 0;
try

{
Process p = Process.GetProcessById(processId);
targetWindow = AutomationElement.FromHandle(p.MainWindowHandle);
return targetWindow;
}
catch (Exception ex)

{
count++;
StringBuilder sb = new StringBuilder();
string message = sb.AppendLine(string.Format("Target window is not existing.try #{0}", count)).ToString();
if (count > 5)

{
throw new InvalidProgramException(message, ex);
}
else

{
return FindWindowByProcessId(processId);
}
}
}



/**//// <summary>
/// Get the automation element by automation Id.
/// </summary>
/// <param name="windowName">Window name</param>
/// <param name="automationId">Control automation Id</param>
/// <returns>Automatin element searched by automation Id</returns>
public static AutomationElement FindElementById(int processId, string automationId)

{
AutomationElement aeForm = FindWindowByProcessId(processId);
AutomationElement tarFindElement = aeForm.FindFirst(TreeScope.Descendants,
new PropertyCondition(AutomationElement.AutomationIdProperty, automationId));
return tarFindElement;
}


ExpandCollapsePattern helper#region ExpandCollapsePattern helper


/**//// <summary>
/// Get ExpandCollapsePattern
/// </summary>
/// <param name="element">AutomationElement instance</param>
/// <returns>ExpandCollapsePattern instance</returns>
public static ExpandCollapsePattern GetExpandCollapsePattern(AutomationElement element)

{
object currentPattern;
if (!element.TryGetCurrentPattern(ExpandCollapsePattern.Pattern, out currentPattern))

{
throw new Exception(string.Format("Element with AutomationId '{0}' and Name '{1}' does not support the ExpandCollapsePattern.",
element.Current.AutomationId, element.Current.Name));
}
return currentPattern as ExpandCollapsePattern;
}

#endregion
}
}

以下代码为被测程序的xaml文件:

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
<ComboBox Name="comboBox1" Height="23" VerticalAlignment="Top" Margin="94,58,0,0" HorizontalAlignment="Left" Width="119">
7
<ComboBoxItem>kaden</ComboBoxItem>
8
<ComboBoxItem>sam</ComboBoxItem>
9
</ComboBox>
10
</Grid>
11
</Window>
12
Summary
本文主要是对ExpandCollapsePattern 做简单的介绍,并使用ExpandCollapsePattern来操作ComboBox控件,对ComboBox进行Expand和Collapse操作。