GetOrCreateAutomationElements() static private method

static private GetOrCreateAutomationElements ( IElement sourceElements ) : System.Windows.Automation.AutomationElement[]
sourceElements IElement
return System.Windows.Automation.AutomationElement[]
示例#1
0
        public Object GetCurrentPropertyValue(AutomationProperty property,
                                              bool ignoreDefaultValue)
        {
            // TODO: Is this tested? Also, add message
            if (mode == AutomationElementMode.None)
            {
                throw new InvalidOperationException("Cannot request a property or pattern that is not cached");
            }

            object pattern;

            // TODO: Throw ElementNotAvailableException if element no longer exists

            // Default values already handled in IElement implementation
            if (ignoreDefaultValue && !sourceElement.SupportsProperty(property))
            {
                return(NotSupported);
            }

            if (property == AEIds.AcceleratorKeyProperty)
            {
                return(sourceElement.AcceleratorKey);
            }
            else if (property == AEIds.AccessKeyProperty)
            {
                return(sourceElement.AccessKey);
            }
            else if (property == AEIds.AutomationIdProperty)
            {
                return(sourceElement.AutomationId);
            }
            else if (property == AEIds.BoundingRectangleProperty)
            {
                return(sourceElement.BoundingRectangle);
            }
            else if (property == AEIds.ClassNameProperty)
            {
                return(sourceElement.ClassName);
            }
            else if (property == AEIds.ClickablePointProperty)
            {
                Point clickablePoint;
                if (TryGetClickablePoint(out clickablePoint))
                {
                    return(clickablePoint);
                }
                return(null);
            }
            else if (property == AEIds.ControlTypeProperty)
            {
                return(sourceElement.ControlType);
            }
            else if (property == AEIds.CultureProperty)
            {
                return(null);                   // TODO: Implement (new IElement member? not used in UIAutomationWinforms)
            }
            else if (property == AEIds.FrameworkIdProperty)
            {
                return(sourceElement.FrameworkId);
            }
            else if (property == AEIds.HasKeyboardFocusProperty)
            {
                return(sourceElement.HasKeyboardFocus);
            }
            else if (property == AEIds.HelpTextProperty)
            {
                return(sourceElement.HelpText);
            }
            else if (property == AEIds.IsContentElementProperty)
            {
                return(sourceElement.IsContentElement);
            }
            else if (property == AEIds.IsControlElementProperty)
            {
                return(sourceElement.IsControlElement);
            }
            else if (property == AEIds.IsDockPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(DockPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsEnabledProperty)
            {
                return(sourceElement.IsEnabled);
            }
            else if (property == AEIds.IsExpandCollapsePatternAvailableProperty)
            {
                return(TryGetCurrentPattern(ExpandCollapsePatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsGridItemPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsGridPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(GridPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsInvokePatternAvailableProperty)
            {
                return(TryGetCurrentPattern(InvokePatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsKeyboardFocusableProperty)
            {
                return(sourceElement.IsKeyboardFocusable);
            }
            else if (property == AEIds.IsMultipleViewPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(MultipleViewPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsOffscreenProperty)
            {
                return(sourceElement.IsOffscreen);
            }
            else if (property == AEIds.IsPasswordProperty)
            {
                return(sourceElement.IsPassword);
            }
            else if (property == AEIds.IsRangeValuePatternAvailableProperty)
            {
                return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsRequiredForFormProperty)
            {
                return(sourceElement.IsRequiredForForm);
            }
            else if (property == AEIds.IsScrollItemPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(ScrollItemPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsScrollPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsSelectionItemPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(SelectionItemPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsSelectionPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(SelectionPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsTableItemPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(TableItemPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsTablePatternAvailableProperty)
            {
                return(TryGetCurrentPattern(TablePatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsTextPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(TextPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsTogglePatternAvailableProperty)
            {
                return(TryGetCurrentPattern(TogglePatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsTransformPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(TransformPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsValuePatternAvailableProperty)
            {
                return(TryGetCurrentPattern(ValuePatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.IsWindowPatternAvailableProperty)
            {
                return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern));
            }
            else if (property == AEIds.ItemStatusProperty)
            {
                return(sourceElement.ItemStatus);
            }
            else if (property == AEIds.ItemTypeProperty)
            {
                return(sourceElement.ItemType);
            }
            else if (property == AEIds.LabeledByProperty)
            {
                // TODO: Caching behavior here should be tested more
                return(SourceManager.GetOrCreateAutomationElement(sourceElement.LabeledBy));
            }
            else if (property == AEIds.LocalizedControlTypeProperty)
            {
                return(sourceElement.LocalizedControlType);
            }
            else if (property == AEIds.NameProperty)
            {
                return(sourceElement.Name);
            }
            else if (property == AEIds.NativeWindowHandleProperty)
            {
                return(sourceElement.NativeWindowHandle);
            }
            else if (property == AEIds.OrientationProperty)
            {
                return(sourceElement.Orientation);
            }
            else if (property == AEIds.ProcessIdProperty)
            {
                return(sourceElement.ProcessId);
            }
            else if (property == AEIds.RuntimeIdProperty)
            {
                return(GetRuntimeId());
            }
            else if (property == DockPatternIdentifiers.DockPositionProperty)
            {
                return(TryGetCurrentPattern(DockPatternIdentifiers.Pattern, out pattern)? ((DockPattern)pattern).Source.DockPosition: DockPosition.None);
            }
            else if (property == ExpandCollapsePatternIdentifiers.ExpandCollapseStateProperty)
            {
                return(TryGetCurrentPattern(ExpandCollapsePatternIdentifiers.Pattern, out pattern)? ((ExpandCollapsePattern)pattern).Source.ExpandCollapseState: ExpandCollapseState.LeafNode);
            }
            else if (property == GridItemPatternIdentifiers.ColumnProperty)
            {
                return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? ((GridItemPattern)pattern).Source.Column: 0);
            }
            else if (property == GridItemPatternIdentifiers.ColumnSpanProperty)
            {
                return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? ((GridItemPattern)pattern).Source.ColumnSpan: 1);
            }
            else if (property == GridItemPatternIdentifiers.ContainingGridProperty)
            {
                return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElement(((GridItemPattern)pattern).Source.ContainingGrid): null);
            }
            else if (property == GridItemPatternIdentifiers.RowProperty)
            {
                return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? ((GridItemPattern)pattern).Source.Row: 0);
            }
            else if (property == GridItemPatternIdentifiers.RowSpanProperty)
            {
                return(TryGetCurrentPattern(GridItemPatternIdentifiers.Pattern, out pattern)? ((GridItemPattern)pattern).Source.RowSpan: 1);
            }
            else if (property == GridPatternIdentifiers.ColumnCountProperty)
            {
                return(TryGetCurrentPattern(GridPatternIdentifiers.Pattern, out pattern)? ((GridPattern)pattern).Source.ColumnCount: 0);
            }
            else if (property == GridPatternIdentifiers.RowCountProperty)
            {
                return(TryGetCurrentPattern(GridPatternIdentifiers.Pattern, out pattern)? ((GridPattern)pattern).Source.RowCount: 0);
            }
            else if (property == MultipleViewPatternIdentifiers.CurrentViewProperty)
            {
                return(TryGetCurrentPattern(MultipleViewPatternIdentifiers.Pattern, out pattern)? ((MultipleViewPattern)pattern).Source.CurrentView: 0);
            }
            else if (property == MultipleViewPatternIdentifiers.SupportedViewsProperty)
            {
                return(TryGetCurrentPattern(MultipleViewPatternIdentifiers.Pattern, out pattern)? ((MultipleViewPattern)pattern).Source.GetSupportedViews(): new int [0]);
            }
            else if (property == RangeValuePatternIdentifiers.IsReadOnlyProperty)
            {
                return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.IsReadOnly: true);
            }
            else if (property == RangeValuePatternIdentifiers.LargeChangeProperty)
            {
                return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.LargeChange: 0);
            }
            else if (property == RangeValuePatternIdentifiers.MaximumProperty)
            {
                return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.Maximum: 0);
            }
            else if (property == RangeValuePatternIdentifiers.MinimumProperty)
            {
                return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.Minimum: 0);
            }
            else if (property == RangeValuePatternIdentifiers.SmallChangeProperty)
            {
                return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.SmallChange: 0);
            }
            else if (property == RangeValuePatternIdentifiers.ValueProperty)
            {
                return(TryGetCurrentPattern(RangeValuePatternIdentifiers.Pattern, out pattern)? ((RangeValuePattern)pattern).Source.Value: 0);
            }
            else if (property == ScrollPatternIdentifiers.HorizontallyScrollableProperty)
            {
                return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.HorizontallyScrollable: false);
            }
            else if (property == ScrollPatternIdentifiers.HorizontalScrollPercentProperty)
            {
                return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.HorizontalScrollPercent: 0);
            }
            else if (property == ScrollPatternIdentifiers.HorizontalViewSizeProperty)
            {
                return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.HorizontalViewSize: 100);
            }
            else if (property == ScrollPatternIdentifiers.VerticallyScrollableProperty)
            {
                return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.VerticallyScrollable: false);
            }
            else if (property == ScrollPatternIdentifiers.VerticalScrollPercentProperty)
            {
                return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.VerticalScrollPercent: 0);
            }
            else if (property == ScrollPatternIdentifiers.VerticalViewSizeProperty)
            {
                return(TryGetCurrentPattern(ScrollPatternIdentifiers.Pattern, out pattern)? ((ScrollPattern)pattern).Source.VerticalViewSize: 100);
            }
            else if (property == SelectionItemPatternIdentifiers.IsSelectedProperty)
            {
                return(TryGetCurrentPattern(SelectionItemPatternIdentifiers.Pattern, out pattern)? ((SelectionItemPattern)pattern).Source.IsSelected: false);
            }
            else if (property == SelectionItemPatternIdentifiers.SelectionContainerProperty)
            {
                return(TryGetCurrentPattern(SelectionItemPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElement(((SelectionItemPattern)pattern).Source.SelectionContainer): null);
            }
            else if (property == SelectionPatternIdentifiers.CanSelectMultipleProperty)
            {
                return(TryGetCurrentPattern(SelectionPatternIdentifiers.Pattern, out pattern)? ((SelectionPattern)pattern).Source.CanSelectMultiple: false);
            }
            else if (property == SelectionPatternIdentifiers.IsSelectionRequiredProperty)
            {
                return(TryGetCurrentPattern(SelectionPatternIdentifiers.Pattern, out pattern)? ((SelectionPattern)pattern).Source.IsSelectionRequired: false);
            }
            else if (property == SelectionPatternIdentifiers.SelectionProperty)
            {
                return(TryGetCurrentPattern(SelectionPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((SelectionPattern)pattern).Source.GetSelection()): new AutomationElement [0]);
            }
            else if (property == TableItemPatternIdentifiers.ColumnHeaderItemsProperty)
            {
                return(TryGetCurrentPattern(TableItemPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((TableItemPattern)pattern).Source.GetColumnHeaderItems()): new AutomationElement [0]);
            }
            else if (property == TableItemPatternIdentifiers.RowHeaderItemsProperty)
            {
                return(TryGetCurrentPattern(TableItemPatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((TableItemPattern)pattern).Source.GetRowHeaderItems()): new AutomationElement [0]);
            }
            else if (property == TablePatternIdentifiers.ColumnHeadersProperty)
            {
                return(TryGetCurrentPattern(TablePatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((TablePattern)pattern).Source.GetColumnHeaders()): new AutomationElement [0]);
            }
            else if (property == TablePatternIdentifiers.RowHeadersProperty)
            {
                return(TryGetCurrentPattern(TablePatternIdentifiers.Pattern, out pattern)? SourceManager.GetOrCreateAutomationElements(((TablePattern)pattern).Source.GetRowHeaders()): new AutomationElement [0]);
            }
            else if (property == TablePatternIdentifiers.RowOrColumnMajorProperty)
            {
                return(TryGetCurrentPattern(TablePatternIdentifiers.Pattern, out pattern)? ((TablePattern)pattern).Source.RowOrColumnMajor: RowOrColumnMajor.Indeterminate);
            }
            else if (property == TogglePatternIdentifiers.ToggleStateProperty)
            {
                return(TryGetCurrentPattern(TogglePatternIdentifiers.Pattern, out pattern)? ((TogglePattern)pattern).Source.ToggleState: ToggleState.Indeterminate);
            }
            else if (property == TransformPatternIdentifiers.CanMoveProperty)
            {
                return(TryGetCurrentPattern(TransformPatternIdentifiers.Pattern, out pattern)? (bool)((TransformPattern)pattern).Source.CanMove: false);
            }
            else if (property == TransformPatternIdentifiers.CanResizeProperty)
            {
                return(TryGetCurrentPattern(TransformPatternIdentifiers.Pattern, out pattern)? ((TransformPattern)pattern).Source.CanResize: false);
            }
            else if (property == TransformPatternIdentifiers.CanRotateProperty)
            {
                return(TryGetCurrentPattern(TransformPatternIdentifiers.Pattern, out pattern)? ((TransformPattern)pattern).Source.CanRotate: false);
            }
            else if (property == ValuePatternIdentifiers.IsReadOnlyProperty)
            {
                return(TryGetCurrentPattern(ValuePatternIdentifiers.Pattern, out pattern)? ((ValuePattern)pattern).Source.IsReadOnly: true);
            }
            else if (property == ValuePatternIdentifiers.ValueProperty)
            {
                return(TryGetCurrentPattern(ValuePatternIdentifiers.Pattern, out pattern)? ((ValuePattern)pattern).Source.Value: String.Empty);
            }
            else if (property == WindowPatternIdentifiers.CanMaximizeProperty)
            {
                return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? (bool)((WindowPattern)pattern).Source.CanMaximize: false);
            }
            else if (property == WindowPatternIdentifiers.CanMinimizeProperty)
            {
                return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? (bool)((WindowPattern)pattern).Source.CanMinimize: false);
            }
            else if (property == WindowPatternIdentifiers.IsModalProperty)
            {
                return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? ((WindowPattern)pattern).Source.IsModal: false);
            }
            else if (property == WindowPatternIdentifiers.IsTopmostProperty)
            {
                return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? ((WindowPattern)pattern).Source.IsTopmost: false);
            }
            else if (property == WindowPatternIdentifiers.WindowInteractionStateProperty)
            {
                return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? ((WindowPattern)pattern).Source.WindowInteractionState: WindowInteractionState.Running);
            }
            else if (property == WindowPatternIdentifiers.WindowVisualStateProperty)
            {
                return(TryGetCurrentPattern(WindowPatternIdentifiers.Pattern, out pattern)? ((WindowPattern)pattern).Source.WindowVisualState: WindowVisualState.Normal);
            }
            Log.Debug("GetCurrentPropertyValue not implemented for: " + property.ProgrammaticName);
            return(NotSupported);
        }