Поделиться через


AutomationInteropProvider.RaiseStructureChangedEvent Метод

Определение

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

public:
 static void RaiseStructureChangedEvent(System::Windows::Automation::Provider::IRawElementProviderSimple ^ provider, System::Windows::Automation::StructureChangedEventArgs ^ e);
public static void RaiseStructureChangedEvent (System.Windows.Automation.Provider.IRawElementProviderSimple provider, System.Windows.Automation.StructureChangedEventArgs e);
static member RaiseStructureChangedEvent : System.Windows.Automation.Provider.IRawElementProviderSimple * System.Windows.Automation.StructureChangedEventArgs -> unit
Public Shared Sub RaiseStructureChangedEvent (provider As IRawElementProviderSimple, e As StructureChangedEventArgs)

Параметры

provider
IRawElementProviderSimple

Элемент, связанный с событием.

e
StructureChangedEventArgs

Сведения о событии.

Примеры

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

/// <summary>
/// Responds to an addition to the UI Automation tree structure by raising an event.
/// </summary>
/// <param name="list">
/// The list to which the item was added.
/// </param>
/// <remarks>
/// For the runtime Id of the item, pass 0 because the provider cannot know
/// what its actual runtime Id is.
/// </remarks>
public static void OnStructureChangeAdd(CustomListControl list)
{
    if (AutomationInteropProvider.ClientsAreListening)
    {
        int[] fakeRuntimeId = { 0 };
        StructureChangedEventArgs args =
            new StructureChangedEventArgs(StructureChangeType.ChildrenBulkAdded, 
            fakeRuntimeId);
        AutomationInteropProvider.RaiseStructureChangedEvent(
            (IRawElementProviderSimple)list.Provider, args);
    }
}

/// <summary>
/// Responds to a removal from the UI Automation tree structure 
/// by raising an event.
/// </summary>
/// <param name="list">
/// The list from which the item was removed.
/// </param>
/// <remarks>
/// For the runtime Id of the list, pass 0 because the provider cannot know
/// what its actual runtime ID is.
/// </remarks>
public static void OnStructureChangeRemove(CustomListControl list)
{
    if (AutomationInteropProvider.ClientsAreListening)
    {
        int[] fakeRuntimeId = { 0 };
        StructureChangedEventArgs args =
            new StructureChangedEventArgs(StructureChangeType.ChildrenBulkRemoved, 
            fakeRuntimeId);
        AutomationInteropProvider.RaiseStructureChangedEvent(
            (IRawElementProviderSimple)list.Provider, args);
    }
}
''' <summary>
''' Responds to an addition to the UI Automation tree structure by raising an event.
''' </summary>
''' <param name="list">
''' The list to which the item was added.
''' </param>
''' <remarks>
''' For the runtime Id of the item, pass 0 because the provider cannot know
''' what its actual runtime Id is.
''' </remarks>
Public Shared Sub OnStructureChangeAdd(ByVal list As CustomListControl)
    If AutomationInteropProvider.ClientsAreListening Then
        Dim fakeRuntimeId(1) As Integer
        fakeRuntimeId(0) = 0
        Dim args As New StructureChangedEventArgs( _
            StructureChangeType.ChildrenBulkAdded, fakeRuntimeId)
        AutomationInteropProvider.RaiseStructureChangedEvent( _
            CType(list.Provider, IRawElementProviderSimple), args)
    End If

End Sub


''' <summary>
''' Responds to a removal from the UI Automation tree structure by raising an event.
''' </summary>
''' <param name="list">
''' The list from which the item was removed.
''' </param>
''' <remarks>
''' For the runtime Id of the list, pass 0 because the provider cannot know
''' what its actual runtime ID is.
''' </remarks>
Public Shared Sub OnStructureChangeRemove(ByVal list As CustomListControl)
    If AutomationInteropProvider.ClientsAreListening Then
        Dim fakeRuntimeId(1) As Integer
        fakeRuntimeId(0) = 0
        Dim args As New StructureChangedEventArgs( _
            StructureChangeType.ChildrenBulkRemoved, fakeRuntimeId)
        AutomationInteropProvider.RaiseStructureChangedEvent( _
            CType(list.Provider, IRawElementProviderSimple), args)
    End If

End Sub

Комментарии

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

При удалении дочернего элемента конструктору передается StructureChangedEventArgs идентификатор среды выполнения элемента или его контейнера. Однако в текущей версии автоматизации пользовательского интерфейса не существует простого способа для экземпляра поставщика обнаружить его идентификатор среды выполнения. Метод GetRuntimeId обычно возвращает массив, содержащий AppendRuntimeId, магическое число, которое предписывает системе автоматизации пользовательского интерфейса создать уникальный идентификатор для каждого экземпляра элемента управления. Необработанное значение, предоставленное параметром GetRuntimeId , не должно использоваться в событиях, так как оно не имеет смысла для клиентов и не может использоваться для идентификации конкретного экземпляра.

Из-за этого ограничения события типа ChildAdded и ChildRemoved не очень полезны. В качестве альтернативы всегда используйте ChildrenBulkAdded и ChildrenBulkRemoved, передавая 0 в качестве идентификатора среды выполнения. Нельзя использовать null, так как это приведет к возникновению исключения. Клиенты будут получать уведомления о том, что в контейнер было внесено изменение (идентифицируется параметром, переданным sender в StructureChangedEventHandler), без конкретного уведомления о добавлении или удалении дочерних элементов.

Применяется к

См. также раздел