Свойства автоматизации пользовательского интерфейса для клиентов

Примечание.

Эта документация предназначена для разработчиков .NET Framework, желающих использовать управляемые классы автоматизации пользовательского интерфейса, определенные в пространстве имен System.Windows.Automation. Последние сведения об автоматизации пользовательского интерфейса см. в статье API автоматизации Windows. Автоматизация пользовательского интерфейса.

В этом обзоре описаны модель автоматизации пользовательского интерфейса свойства, предоставляемые модель автоматизации пользовательского интерфейса клиентским приложениям.

Свойства объектов AutomationElement содержат сведения о элементах пользовательского интерфейса , как правило, элементах управления. Свойства AutomationElement являются универсальными, т. е. не относящимися только к определенному типу элемента управления. Многие из этих свойств представлены в структуре AutomationElement.AutomationElementInformation .

Шаблоны элементов управления также обладают свойствами. Свойства шаблонов элементов управления относятся к конкретному шаблону. Например, ScrollPattern имеет свойства, которые позволяют клиентскому приложению обнаружить, является ли окно горизонтально или вертикально прокручиваемым, а также размеры текущего представления и позиции прокрутки. Шаблоны элементов управления предоставляют все свои свойства через структуру; например ScrollPattern.ScrollPatternInformation.

модель автоматизации пользовательского интерфейса свойства доступны только для чтения. Чтобы задать свойства элемента управления, вы должны использовать методы соответствующего шаблона элемента управления. Например, используйте метод Scroll для изменения значений позиции прокручиваемого окна.

Для повышения производительности значения свойств и шаблоны элементов управления могут кэшироваться при получении объектов AutomationElement . Дополнительные сведения см. в разделе "Кэширование" в модель автоматизации пользовательского интерфейса клиентах.

Идентификаторы свойств

Идентификаторы свойств являются уникальными, константными значениями, инкапсулированными в AutomationProperty объектах. модель автоматизации пользовательского интерфейса клиентские приложения получают эти идентификаторы из AutomationElement класса или из соответствующего класса шаблона элемента управления, напримерScrollPattern. Поставщики автоматизации пользовательского интерфейса получают их из AutomationElementIdentifiers или из одного из классов идентификаторов шаблонов элементов управления, такого как ScrollPatternIdentifiers.

Числовой Id объекта AutomationProperty используется поставщиками для идентификации свойств, которые запрашиваются в методе IRawElementProviderSimple.GetPropertyValue . Как правило, клиентские приложения не должны проверять Id. Используется ProgrammaticName только для отладки и диагностики.

Условия свойств

Идентификаторы свойств используются в создании PropertyCondition объектов, используемых для поиска AutomationElement объектов. Например, может потребоваться найти AutomationElement с определенным именем или все включенные элементы управления. Каждое PropertyCondition определяет идентификатор AutomationProperty и значение, которому свойство должно соответствовать.

Дополнительные сведения см. в следующих справочных разделах.

Получение свойств

Некоторые свойства AutomationElement и все свойства класса шаблонов элементов управления представляются как вложенные свойства Current или свойство Cached элемента AutomationElement или объекта шаблона элемента управления.

Кроме того, любое свойство AutomationElement или шаблона элемента управления, включая свойство, недоступное в структуре Cached или Current , можно получить с помощью одного из следующих методов.

Эти методы обеспечивают несколько улучшенную производительность, а также доступ к полному набору свойств.

В следующем примере кода показаны два способа получения свойства в AutomationElement.

// elementList is an AutomationElement.

// The following two calls are equivalent.
string name = elementList.Current.Name;
name = elementList.GetCurrentPropertyValue(AutomationElement.NameProperty) as string;
' elementList is an AutomationElement.
' The following two calls are equivalent.
Dim name As String = elementList.Current.Name
name = CStr(elementList.GetCurrentPropertyValue(AutomationElement.NameProperty))

Для получения свойств шаблонов элементов управления, поддерживаемых AutomationElement, вам не нужно получать объект шаблона элемента управления. Просто передайте один из идентификаторов свойств шаблона в метод.

В следующем примере кода показаны два способа получения свойства в шаблоне элемента управления.

// elementList is an AutomationElement representing a list box.
// Error-checking is omitted. Assume that elementList is known to support SelectionPattern.

SelectionPattern selectPattern =
    elementList.GetCurrentPattern(SelectionPattern.Pattern) as SelectionPattern;
bool isMultipleSelect = selectPattern.Current.CanSelectMultiple;

// The following call is equivalent to the one above.
isMultipleSelect = (bool)
    elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty);
' elementList is an AutomationElement representing a list box.
' Error-checking is omitted. Assume that elementList is known to support SelectionPattern.
Dim selectPattern As SelectionPattern = _
    DirectCast(elementList.GetCurrentPattern(SelectionPattern.Pattern), SelectionPattern)
Dim isMultipleSelect As Boolean = selectPattern.Current.CanSelectMultiple

' The following call is equivalent to the one above.
isMultipleSelect = CBool(elementList.GetCurrentPropertyValue(SelectionPattern.CanSelectMultipleProperty))

Методы Get возвращают Object. Прежде чем использовать это значение, приложение должно привести возвращенный объект к соответствующему типу.

Значения свойств по умолчанию

Если поставщик модель автоматизации пользовательского интерфейса не реализует свойство, система модель автоматизации пользовательского интерфейса может предоставить значение по умолчанию. Например, если поставщик элемента управления не поддерживает свойство, определяемое HelpTextPropertyмодель автоматизации пользовательского интерфейса возвращает пустую строку. Аналогичным образом, если поставщик не поддерживает свойство, определяемое модель автоматизации пользовательского интерфейса IsDockPatternAvailablePropertyвозвращаетсяfalse.

Это поведение можно изменить с помощью перегрузок метода AutomationElement.GetCachedPropertyValue и AutomationElement.GetCurrentPropertyValue . При указании true в качестве второго параметра модель автоматизации пользовательского интерфейса не возвращает значение по умолчанию, а возвращает специальное значениеNotSupported.

В следующем примере код пытается извлечь свойство из элемента, и если это свойство не поддерживается, вместо него используется значение, определенное приложением.

// elementList is an AutomationElement.
object help = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, true);
if (help == AutomationElement.NotSupported)
{
    help = "No help available";
}
string helpText = (string)help;
' elementList is an AutomationElement.
Dim help As Object = elementList.GetCurrentPropertyValue(AutomationElement.HelpTextProperty, True)
If help Is AutomationElement.NotSupported Then
    help = "No help available"
End If
Dim helpText As String = CStr(help)

Чтобы определить, какие свойства поддерживаются элементом, используйте метод GetSupportedProperties. Он возвращает массив идентификаторов AutomationProperty .

События изменения свойств

При изменении значения свойства в AutomationElement или в шаблоне элемента управления вызывается событие. Приложения может подписаться на такие события путем вызова метода AddAutomationPropertyChangedEventHandler, предоставив массив идентификаторов AutomationProperty в качестве последнего параметра, чтобы указать интересующие свойства.

В AutomationPropertyChangedEventHandlerможно обнаружить свойство, которое было изменено, проверив член Property аргументов события. Аргументы также содержат старые и новые значения свойства модель автоматизации пользовательского интерфейса, которое изменилось. Эти значения имеют тип Object , и перед использованием их необходимо привести к правильному типу.

Дополнительные свойства AutomationElement

Помимо структур свойств Current и Cached , AutomationElement имеет следующие свойства, которые можно получить с помощью простых методов доступа к свойствам.

Свойство Description
CachedChildren Коллекция дочерних объектов AutomationElement , находящихся в кэше.
CachedParent Родительский объект AutomationElement , находящийся в кэше.
FocusedElement (Статическое свойство) AutomationElement , имеющий фокус ввода.
RootElement (Статическое свойство) Корневой AutomationElement, имеющий фокус ввода.

См. также