Пример #1
0
 private static void RaisePropertyChangedEvent(ProxySimple el, AutomationProperty property, object propertyValue)
 {
     if (propertyValue != null && propertyValue != AutomationElement.NotSupported)
     {
         AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(el, new AutomationPropertyChangedEventArgs(property, null, propertyValue));
     }
 }
Пример #2
0
        //------------------------------------------------------
        //
        //  Internal Methods
        //
        //------------------------------------------------------

        #region Internal Methods

        // Recursively Raise an Event for all the sub elements
        override internal void RecursiveRaiseEvents(object idProp, AutomationPropertyChangedEventArgs e)
        {
            AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(this, e);
            for (ProxySimple el = GetFirstChild(); el != null; el = this.GetNextSibling(el))
            {
                el.RecursiveRaiseEvents(idProp, e);
            }
        }
Пример #3
0
// </Snippet122>

// <Snippet123>
        /// <summary>
        /// Raises an event when the IsEnabled property on a control is changed.
        /// </summary>
        /// <param name="provider">The UI Automation provider for the control.</param>
        /// <param name="newValue">The current enabled state.</param>
        private void RaiseEnabledEvent(IRawElementProviderSimple provider, bool newValue)
        {
            if (AutomationInteropProvider.ClientsAreListening)
            {
                AutomationPropertyChangedEventArgs args =
                    new AutomationPropertyChangedEventArgs(AutomationElement.IsEnabledProperty,
                                                           !newValue, newValue);
                AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(provider, args);
            }
        }
Пример #4
0
        // DON'T USE THIS SNIPPET -- PROBABLY NOT RAISING CORRECT EVENTS

        // <Snippet118>
        /// <summary>
        /// Selects an item in the myItems collection.
        /// </summary>
        /// <param name="index">Index of the selected item.</param>
        /// <remarks>
        /// This is a single-selection list whose current selection is stored
        /// internally in mySelection.
        /// MyListItem is the provider class for list items.
        /// </remarks>
        public void Select(int index)
        {
            if (index >= myItems.Count)
            {
                throw new ArgumentOutOfRangeException();
            }
            else if (index < 0)
            {
                mySelection = -1;
                return;
            }
            else
            // If within range, clear the Selected property on the current item
            // and set it on the new item.
            {
                MyListItem newItem;
                MyListItem oldItem = null;

                // Deselect old item, if there is one; list might not be initialized.
                if (mySelection >= 0)
                {
                    oldItem          = myItems[mySelection] as MyListItem;
                    oldItem.Selected = false;
                }
                mySelection      = index;
                newItem          = myItems[mySelection] as MyListItem;
                newItem.Selected = true;
                // Raise events that clients can receive.
                if (AutomationInteropProvider.ClientsAreListening)
                {
                    // Generic event for selection made.
                    AutomationEventArgs args = new AutomationEventArgs(SelectionItemPatternIdentifiers.ElementSelectedEvent);
                    AutomationInteropProvider.RaiseAutomationEvent(SelectionItemPattern.ElementSelectedEvent,
                                                                   (IRawElementProviderSimple)myItems[mySelection], args);

                    // Property-changed event for old item's Selection property.
                    AutomationPropertyChangedEventArgs propArgs;
                    if (oldItem != null)
                    {
                        propArgs = new AutomationPropertyChangedEventArgs(
                            SelectionItemPatternIdentifiers.IsSelectedProperty, true, false);
                        AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(oldItem, propArgs);
                    }

                    // Property-changed event for new item's Selection property.
                    propArgs = new AutomationPropertyChangedEventArgs(
                        SelectionItemPatternIdentifiers.IsSelectedProperty, false, true);
                    AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(newItem, propArgs);
                }
            }
        }
Пример #5
0
        public void SetDockPosition(DockPosition dockPosition)
        {
            DockPosition oldValue = DockPosition;

            DockPosition = dockPosition;

            this.Invoke((MethodInvoker) delegate() {
                switch (dockPosition)
                {
                case DockPosition.Top:
                    Dock = DockStyle.Top;
                    break;

                case DockPosition.Bottom:
                    Dock = DockStyle.Bottom;
                    break;

                case DockPosition.Left:
                    Dock = DockStyle.Left;
                    break;

                case DockPosition.Right:
                    Dock = DockStyle.Right;
                    break;

                case DockPosition.Fill:
                    Dock = DockStyle.Fill;
                    break;

                default:
                    Dock = DockStyle.None;
                    break;
                }
                Text = Dock.ToString();
            });

            if (AutomationInteropProvider.ClientsAreListening)
            {
                AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(this,
                                                                              new AutomationPropertyChangedEventArgs(DockPattern.DockPositionProperty,
                                                                                                                     oldValue, DockPosition));
                AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(this,
                                                                              new AutomationPropertyChangedEventArgs(AutomationElementIdentifiers.NameProperty,
                                                                                                                     oldValue.ToString(), DockPosition.ToString()));
            }
        }
Пример #6
0
        protected void RaiseAutomationPropertyChangedEvent()
        {
            if (AutomationInteropProvider.ClientsAreListening == true)
            {
                object newValue = GetNewPropertyValue();

                if (object.Equals(OldValue, newValue) == false)
                {
                    AutomationPropertyChangedEventArgs args =
                        new AutomationPropertyChangedEventArgs(Property,
                                                               OldValue,
                                                               newValue);
                    AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(Provider,
                                                                                  args);
                    OldValue = newValue;
                }
            }
        }
        // fire the property change event if there is a client listening for it.
        // pattern is the pattern that the property belongs to. the provider is tested to ensure it supports that pattern.
        private void MaybeFirePropertyChangeEvent(AutomationPattern pattern, AutomationProperty property, Hashtable eventTable, IntPtr hwnd, int idObject, int idChild, bool clientToo)
        {
            // if the 2-nd level table contains an entry for this property and the root element should be included (or not)
            if (eventTable.ContainsKey(property) && (clientToo || !IsClientObject(idObject, idChild)))
            {
                // create a provider associated with this event and check whether it supports the pattern, if specified.
                MsaaNativeProvider provider = (MsaaNativeProvider)MsaaNativeProvider.Create(hwnd, idChild, idObject);
                if (provider != null && (pattern == null || provider.IsPatternSupported(pattern)))
                {
                    // get the new property value from the provider.
                    object newValue = ((IRawElementProviderSimple)provider).GetPropertyValue(property.Id);

                    // fire the event
                    AutomationPropertyChangedEventArgs eventArgs = new AutomationPropertyChangedEventArgs(property, null, newValue);
                    //Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "Firing {0} change event for {1}", property, hwnd), "NativeMsaaProxy");
                    AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(provider, eventArgs);
                }
            }
        }
        private void OnProviderBehaviorSet(object sender, ProviderBehaviorEventArgs eventArgs)
        {
            if (AutomationInteropProvider.ClientsAreListening == false)
            {
                return;
            }
            else if ((eventArgs.Replaced == true && eventArgs.Behavior == null) ||
                     (eventArgs.Replaced == false && eventArgs.Behavior != null))
            {
                AutomationProperty property = null;

                if (eventArgs.Pattern == DockPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsDockPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == ExpandCollapsePatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsExpandCollapsePatternAvailableProperty;
                }
                else if (eventArgs.Pattern == GridItemPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsGridItemPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == GridPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsGridPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == InvokePatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsInvokePatternAvailableProperty;
                }
                else if (eventArgs.Pattern == LegacyIAccessiblePatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsLegacyIAccessiblePatternAvailableProperty;
                }
                else if (eventArgs.Pattern == MultipleViewPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsMultipleViewPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == RangeValuePatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsRangeValuePatternAvailableProperty;
                }
                else if (eventArgs.Pattern == ScrollItemPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsScrollItemPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == ScrollPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsScrollPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == SelectionItemPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsSelectionItemPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == SelectionPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsSelectionPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == TableItemPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsTableItemPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == TablePatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsTablePatternAvailableProperty;
                }
                else if (eventArgs.Pattern == TextPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsTextPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == TogglePatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsTogglePatternAvailableProperty;
                }
                else if (eventArgs.Pattern == TransformPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsTransformPatternAvailableProperty;
                }
                else if (eventArgs.Pattern == ValuePatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsValuePatternAvailableProperty;
                }
                else if (eventArgs.Pattern == WindowPatternIdentifiers.Pattern)
                {
                    property = AutomationElementIdentifiers.IsWindowPatternAvailableProperty;
                }

                if (property == null)                 //This never should happen, theoretically
                {
                    return;
                }

                bool?val = Provider.GetPropertyValue(property.Id) as bool?;

                // This should never happen.
                if (val == null)
                {
                    return;
                }

                bool newValue = val ?? false;

                AutomationPropertyChangedEventArgs args
                    = new AutomationPropertyChangedEventArgs(property,
                                                             !newValue,
                                                             newValue);
                AutomationInteropProvider.RaiseAutomationPropertyChangedEvent(Provider,
                                                                              args);
            }
        }