public void ExpandCollapse() { try { var pattern = Element.GetExpandCollapsePattern(); switch (pattern.Current.ExpandCollapseState) { case ExpandCollapseState.Collapsed: pattern.Expand(); break; case ExpandCollapseState.Expanded: pattern.Collapse(); break; case ExpandCollapseState.LeafNode: break; case ExpandCollapseState.PartiallyExpanded: pattern.Expand(); break; default: break; } } catch (InvalidOperationException) { Console.WriteLine("Can't expand/collapse"); foreach (var pattern in Element.GetSupportedPatterns()) { Console.WriteLine("{0} {1}", pattern.Id, pattern.ProgrammaticName); } try { Element.GetInvokePattern().Invoke(); } catch (InvalidOperationException) { Console.WriteLine("Can't even invoke, let's try double clicking..."); // What an annoying control... var point = Element.GetClickablePoint(); point.Offset(0.0, 50.0); Mouse.MoveTo(point); System.Threading.Thread.Sleep(100); point.Offset(0.0, -50.0); Mouse.MoveTo(point); System.Threading.Thread.Sleep(100); Mouse.DoubleClick(System.Windows.Input.MouseButton.Left); System.Threading.Thread.Sleep(100); } } }