IViewAutomationPeer 接口

定义

允许派生自 ListViewViewBase 的自定义视图实现特定于自定义视图的自动化同级功能。

public interface class IViewAutomationPeer
public interface IViewAutomationPeer
type IViewAutomationPeer = interface
Public Interface IViewAutomationPeer
派生

示例

以下代码显示了在单独的类中实现 IViewAutomationPeer 的自定义视图,用于处理显示在控件顶部的 ListView 按钮。

public class OneButtonHeaderView : ViewBase
{
    protected override IViewAutomationPeer GetAutomationPeer(ListView parent)
    {
        return new OneButtonHeaderViewAutomationPeer( this, parent );
    }
Public Class OneButtonHeaderView
    Inherits ViewBase
    Protected Overrides Function GetAutomationPeer(ByVal parent As ListView) As IViewAutomationPeer
        Return New OneButtonHeaderViewAutomationPeer(Me, parent)
    End Function
public class OneButtonHeaderViewAutomationPeer : IViewAutomationPeer
{
    ListView m_lv;

    public OneButtonHeaderViewAutomationPeer(OneButtonHeaderView control, ListView parent)
    {
        m_lv = parent;
    }

    ItemAutomationPeer IViewAutomationPeer.CreateItemAutomationPeer(Object item)
    {
        ListViewAutomationPeer lvAP = UIElementAutomationPeer.FromElement(m_lv) as ListViewAutomationPeer;
        return new ListBoxItemAutomationPeer(item, lvAP);
    }

    AutomationControlType IViewAutomationPeer.GetAutomationControlType()
    {
        return AutomationControlType.List;
    }

    List<AutomationPeer> IViewAutomationPeer.GetChildren(List<AutomationPeer> children)
    {
        // the children parameter is a list of automation peers for all the known items
        // our view must add its banner button peer to this list.

        Button b = (Button)m_lv.Template.FindName("BannerButton", m_lv);
        AutomationPeer peer = UIElementAutomationPeer.CreatePeerForElement(b);

        //If children is null, we still need to create an empty list to insert the button
        children ??= new List<AutomationPeer>();

        children.Insert(0, peer);

        return children;
    }

    Object IViewAutomationPeer.GetPattern(PatternInterface patternInterface)
    {
        // we can invoke the banner button 
        if (patternInterface == PatternInterface.Invoke)
        {
            Button b = (Button)m_lv.Template.FindName("BannerButton", m_lv);
            AutomationPeer peer = UIElementAutomationPeer.FromElement(b);
            if (peer != null)
                return peer;
        }

        // if this view does not have special handling for the pattern interface, return null
        // the ListViewAutomationPeer.GetPattern default handling will be used.
        return null;
    }

    void IViewAutomationPeer.ItemsChanged(System.Collections.Specialized.NotifyCollectionChangedEventArgs e) { }

    void IViewAutomationPeer.ViewDetached() { }
}
Public Class OneButtonHeaderViewAutomationPeer
    Implements IViewAutomationPeer
    Private m_lv As ListView

    Public Sub New(ByVal control As OneButtonHeaderView, ByVal parent As ListView)
        m_lv = parent
    End Sub

    Private Function CreateItemAutomationPeer(ByVal item As Object) As ItemAutomationPeer Implements IViewAutomationPeer.CreateItemAutomationPeer
        Dim lvAP As ListViewAutomationPeer = TryCast(UIElementAutomationPeer.FromElement(m_lv), ListViewAutomationPeer)
        Return New ListBoxItemAutomationPeer(item, lvAP)
    End Function

    Private Function GetAutomationControlType() As AutomationControlType Implements IViewAutomationPeer.GetAutomationControlType
        Return AutomationControlType.List
    End Function

    Private Function GetChildren(ByVal children As List(Of AutomationPeer)) As List(Of AutomationPeer) Implements IViewAutomationPeer.GetChildren
        ' the children parameter is a list of automation peers for all the known items
        ' our view must add its banner button peer to this list.

        Dim b As Button = CType(m_lv.Template.FindName("BannerButton", m_lv), Button)
        Dim peer As AutomationPeer = UIElementAutomationPeer.CreatePeerForElement(b)

        'If children is null, we still need to create an empty list to insert the button
        If children Is Nothing Then
            children = New List(Of AutomationPeer)()
        End If

        children.Insert(0, peer)

        Return children
    End Function

    Private Function GetPattern(ByVal patternInterface As PatternInterface) As Object Implements IViewAutomationPeer.GetPattern
        ' we can invoke the banner button 
        If patternInterface = PatternInterface.Invoke Then
            Dim b As Button = CType(m_lv.Template.FindName("BannerButton", m_lv), Button)
            Dim peer As AutomationPeer = UIElementAutomationPeer.FromElement(b)
            If peer IsNot Nothing Then
                Return peer
            End If
        End If

        ' if this view does not have special handling for the pattern interface, return null
        ' the ListViewAutomationPeer.GetPattern default handling will be used.
        Return Nothing
    End Function

    Private Sub ItemsChanged(ByVal e As System.Collections.Specialized.NotifyCollectionChangedEventArgs) Implements IViewAutomationPeer.ItemsChanged
    End Sub

    Private Sub ViewDetached() Implements IViewAutomationPeer.ViewDetached
    End Sub
End Class

方法

CreateItemAutomationPeer(Object)

创建 ItemAutomationPeer 类的新实例。

GetAutomationControlType()

获取与此 IViewAutomationPeer 关联的元素的控件类型。

GetChildren(List<AutomationPeer>)

获取指定UI 自动化对等的即时子元素的集合。

GetPattern(PatternInterface)

获取与指定 patternInterface 关联的控件模式。

ItemsChanged(NotifyCollectionChangedEventArgs)

当项的集合发生更改时,由 ListView 调用。

ViewDetached()

当自定义视图不再应用到 ListView 时调用。

适用于

另请参阅