Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

ExpandCollapsePattern.Collapse Method

Definition

Namespace:
System.Windows.Automation
Assembly:
UIAutomationClient.dll

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Hides all descendant nodes, controls, or content of the AutomationElement.

public:
 void Collapse();
public void Collapse();
member this.Collapse : unit -> unit
Public Sub Collapse ()

Exceptions

Examples

In the following example, a UI Automation element representing a menu item is passed to a function that attempts to expand or collapse the menu item based on its current ExpandCollapseState.

///--------------------------------------------------------------------
/// <summary>
/// Obtains an ExpandCollapsePattern control pattern from an 
/// automation element.
/// </summary>
/// <param name="targetControl">
/// The automation element of interest.
/// </param>
/// <returns>
/// A ExpandCollapsePattern object.
/// </returns>
///--------------------------------------------------------------------
private ExpandCollapsePattern GetExpandCollapsePattern(
 AutomationElement targetControl)
{
 ExpandCollapsePattern expandCollapsePattern = null;

 try
 {
 expandCollapsePattern =
 targetControl.GetCurrentPattern(
 ExpandCollapsePattern.Pattern)
 as ExpandCollapsePattern;
 }
 // Object doesn't support the ExpandCollapsePattern control pattern.
 catch (InvalidOperationException)
 {
 return null;
 }

 return expandCollapsePattern;
}
'''--------------------------------------------------------------------
''' <summary>
''' Obtains an ExpandCollapsePattern control pattern from an 
''' automation element.
''' </summary>
''' <param name="targetControl">
''' The automation element of interest.
''' </param>
''' <returns>
''' A ExpandCollapsePattern object.
''' </returns>
'''--------------------------------------------------------------------
Private Function GetExpandCollapsePattern( _
ByVal targetControl As AutomationElement) As ExpandCollapsePattern
 Dim expandCollapsePattern As ExpandCollapsePattern = Nothing

 Try
 expandCollapsePattern = DirectCast( _
 targetControl.GetCurrentPattern(expandCollapsePattern.Pattern), _
 ExpandCollapsePattern)
 Catch exc As InvalidOperationException
 ' Object doesn't support the ExpandCollapsePattern control pattern.
 Return Nothing
 End Try

 Return expandCollapsePattern

End Function 'GetExpandCollapsePattern
///--------------------------------------------------------------------
/// <summary>
/// Programmatically expand or collapse a menu item.
/// </summary>
/// <param name="menuItem">
/// The target menu item.
/// </param>
///--------------------------------------------------------------------
private void ExpandCollapseMenuItem(
 AutomationElement menuItem)
{
 if (menuItem == null)
 {
 throw new ArgumentNullException(
 "AutomationElement argument cannot be null.");
 }

 ExpandCollapsePattern expandCollapsePattern =
 GetExpandCollapsePattern(menuItem);

 if (expandCollapsePattern == null)
 {
 return;
 }

 if (expandCollapsePattern.Current.ExpandCollapseState ==
 ExpandCollapseState.LeafNode)
 {
 return;
 }

 try
 {
 if (expandCollapsePattern.Current.ExpandCollapseState == ExpandCollapseState.Expanded)
 {
 // Collapse the menu item.
 expandCollapsePattern.Collapse();
 }
 else if (expandCollapsePattern.Current.ExpandCollapseState == ExpandCollapseState.Collapsed ||
 expandCollapsePattern.Current.ExpandCollapseState == ExpandCollapseState.PartiallyExpanded)
 {
 // Expand the menu item.
 expandCollapsePattern.Expand();
 }
 }
 // Control is not enabled
 catch (ElementNotEnabledException)
 {
 // TO DO: error handling.
 }
 // Control is unable to perform operation.
 catch (InvalidOperationException)
 {
 // TO DO: error handling.
 }
}
'''--------------------------------------------------------------------
''' <summary>
''' Programmatically expand or collapse a menu item.
''' </summary>
''' <param name="menuItem">
''' The target menu item.
''' </param>
'''--------------------------------------------------------------------
Private Sub ExpandCollapseMenuItem(ByVal menuItem As AutomationElement)
 If menuItem Is Nothing Then
 Throw New ArgumentNullException( _
 "AutomationElement argument cannot be null.")
 End If

 Dim expandCollapsePattern As ExpandCollapsePattern = _
 GetExpandCollapsePattern(menuItem)

 If expandCollapsePattern Is Nothing Then
 Return
 End If

 If expandCollapsePattern.Current.ExpandCollapseState = _
 ExpandCollapseState.LeafNode Then
 Return
 End If

 Try
 If expandCollapsePattern.Current.ExpandCollapseState = _
 ExpandCollapseState.Expanded Then
 ' Collapse the menu item.
 expandCollapsePattern.Collapse()

 ElseIf expandCollapsePattern.Current.ExpandCollapseState = _
 ExpandCollapseState.Collapsed OrElse _
 expandCollapsePattern.Current.ExpandCollapseState = _
 ExpandCollapseState.PartiallyExpanded Then
 ' Expand the menu item.
 expandCollapsePattern.Expand()
 End If
 Catch exc As ElementNotEnabledException
 ' Control is not enabled
 ' TO DO: error handling.
 Catch exc As InvalidOperationException
 ' Control is unable to perform operation 
 ' TO DO: error handling.
 End Try

End Sub

Remarks

This is a blocking method that returns after the UI Automation element has been collapsed.

There are cases when a UI Automation element that is marked as a leaf node might not know whether it has children until either the Collapse or the Expand method is called. This behavior is possible with a tree view control that does delayed loading of its child items. For example, Microsoft Windows Explorer might display the expand icon for a node even though there are currently no child items; when the icon is clicked, the control polls for child items, finds none, and removes the expand icon. In these cases clients should listen for a property-changed event on the ExpandCollapseState property by registering an event handler with the AddAutomationPropertyChangedEventHandler method.

Applies to

See also


Feedback

Was this page helpful?