Aracılığıyla paylaş


WPF Özel Denetiminin UI Otomasyonu

Güncelleştirme Tarihi: December 2010

Microsoft UI Automationistemciler incelemek veya platformlar ve çerçeveleri çeşitli kullanıcı arabirimleri işletmek için kullanabilir, otomasyon, genelleştirilmiş tek bir arabirim sağlar. UI Automationkalite güvencesi (test) kodu ve kullanıcı arabirimi öğeleri incelemek ve diğer kodlardan kullanıcı etkileşimi ile onları taklit etmek için ekran okuyucuları gibi erişilebilirlik uygulamaları etkinleştirir. Hakkında bilgi için UI Automation tüm platformlarda görmek Accessibility.

Bu konuda, sunucu tarafı uygulamak açıklar UI Otomasyon sağlayıcı bir wpf uygulamasında çalışan özel bir denetim. wpf destekler UI Automation , eş Otomasyon Nesne Ağacı üzerinden ağacının parallelskullanıcı arabirimi öğeleri. Test kodu ve erişilebilirlik özellikleri Otomasyon eş nesneleri doğrudan (işlem kodu için) kullanarak uygulamalar tarafından sağlanan Genelleştirilmiş arabirimi üzerinden veya UI Automation.

Bu konu aşağıdaki bölümleri içerir.

  • Otomasyon eş sınıfları
  • Yerleşik Otomasyon eş sınıfları
  • Türetilmiş eşleri için güvenlik konuları
  • Eş Gezinti
  • Türetilmiş bir eş'özelleştirmeler
  • İlgili Konular

Otomasyon eş sınıfları

wpf denetler Destek UI Automation eş sınıfları, türetmek ağacı ile AutomationPeer. Kurallarına göre eş sınıf adları, Denetim sınıf adıyla başlar ve "automationpeer" ile biter. Örneğin, ButtonAutomationPeer eş sınıfı olduğu Button Denetim sınıfa Eş sınıfları kabaca UI Automation türlerini denetlemek ancak özgü WPF öğeleri. wpf uygulamaları aracılığıyla erişen otomasyon kodunun UI Automation arabirimi Otomasyonu eşleri doğrudan kullanmaz, ancak aynı işlemi alanında otomasyon kodunun Otomasyon eşleri doğrudan kullanabilir.

Yerleşik Otomasyon eş sınıfları

Öğeleri bir Otomasyon eş sınıfı kullanıcı arabirimi etkinliği kabul veya ekran okuyucu uygulamaları kullanıcıları tarafından gerekli bilgiler içerirler, uygulamak. wpf tüm görsel öğeler Otomasyon eşleri vardır. Otomasyon eşleri uygulayan sınıflar örnekler Button, TextBox, ve Label. Otomasyon eşleri uygulamayan sınıfları örnekler türetilmeli sınıfları Decorator, gibi Borderve temel sınıflar Panel, gibi Grid ve Canvas.

Bankası Control sınıf karşılık gelen bir eş sınıfa sahip değil Bir eş sınıfın türetildiği bir özel denetim karşılık gerekirse Control, özel eş sınıfından türetmek FrameworkElementAutomationPeer.

Türetilmiş eşleri için güvenlik konuları

Otomasyon eşleri bir kısmi güven ortamında çalıştırılmalıdır. UIAutomationClient assembly kodunda bir kısmi güven ortamında çalıştırmak üzere yapılandırılmamış ve Otomasyon eş kodu derlemeyi başvurmalısınız değil. Bunun yerine, sınıfları UIAutomationTypes derlemede kullanmanız gerekir. Örneğin, kullanmanız gereken AutomationElementIdentifiers sınıf derlemesinden karşılık gelen UIAutomationTypes, AutomationElement sınıfı UIAutomationClient derleme. Otomasyon eş kodunda UIAutomationTypes derleme başvurusu daha güvenlidir.

Eş Gezinti

Otomasyon eş bulunduktan sonra işlem kodu eş ağaç nesnenin çağırarak gidebilirsiniz GetChildren ve GetParent yöntemleri. Arasında gezinmeyi WPF denetimin öğelerinin eşin uygulaması tarafından desteklenen GetChildrenCore yöntemi. Bu yöntem, bir denetimin içinde yer alan alt ağacı oluşturmaya UI Otomasyon sistemi çağırır; Örneğin, bir liste kutusundaki öğelerin listesi. Varsayılan UIElementAutomationPeer.GetChildrenCore yöntemi Otomasyon eşleri ağaç oluşturmak için öğeleri görsel ağaç erişir Özel denetimler bilgi ileten veya kullanıcı katılımına izin öğelerinin Otomasyon eşleri Otomasyon istemcilerden için alt öğeleri göstermek için bu yöntemi geçersiz kılar.

Türetilmiş bir eş'özelleştirmeler

Türetilmeli tüm sınıfları UIElement ve ContentElement içeren korumalı sanal bir yöntem OnCreateAutomationPeer. wpf çağrıları OnCreateAutomationPeer alma Otomasyon eş nesne için her denetim. Otomasyon kodunun eş bir denetimin özelliklerini ve özellikler hakkında bilgi almak için ve etkileşimli kullanım benzetimini yapmak için kullanabilirsiniz. Otomasyonu destekleyen özel bir denetim geçersiz kılmalısınız OnCreateAutomationPeer , türetilmiş bir sınıf örneğine dönün ve AutomationPeer. Örneğin, bir özel denetim türetildiği, ButtonBase sınıfı, sonra nesne tarafından döndürülen OnCreateAutomationPeer türetmek ButtonBaseAutomationPeer.

Özel Denetim uygularken, "Çekirdek" kılmalısınız. benzersiz ve özel denetimi belirli davranış açıklayan yöntemleri temel Otomasyon eş sınıfı.

OnCreateAutomationPeer geçersiz kıl

Geçersiz kılma OnCreateAutomationPeer böylece o BT verir, sağlayıcı nesnesi hangi gerekir türetmek doğrudan veya dolaylı olarak gelen özel denetimi için yöntem AutomationPeer.

GetPattern geçersiz kıl

Otomasyon eş sunucu tarafı uygulaması bazı yönlerini basitleştirmek UI Automation sağlayıcıları, ancak özel denetim Otomasyon eşleri gerekir hala ele desen arabirimleri. wpf sağlayıcıları gibi eş denetim desenleri Arabirimleri'nde uygulamaları sağlayarak Destek System.Windows.Automation.Provider ad alanı gibi IInvokeProvider. Denetim deseni arabirimleri, eş veya başka bir nesne tarafından uygulanabilir. Eşin uygulaması GetPattern destekleyen nesnesini döndürürbelirtilen desen. UI AutomationÇağrı kodu GetPattern yöntemini belirtir ve bir PatternInterface numaralandırma değeri. Sizin geçersiz kılma GetPattern dönmek nesne, uygulayan belirtilen desen. Denetimi özel bir desen uygulaması yoksa, temel türün uygulaması çağırabilir GetPattern almak, uygulama veya null, desen için bu denetim türü desteklenmiyor Örneğin, özel bir NumericUpDown denetimi bir aralıktaki bir değere ayarlanabilir şekilde kendi UI Automation eş uygulamak IRangeValueProvider arabirimi. Aşağıdaki örnekte gösterildiği nasıl eşin GetPattern yöntemi geçersiz kılınıyor yanıtlamak için bir PatternInterface.RangeValue değer.

        Public Overrides Function GetPattern(ByVal patternInterface As PatternInterface) As Object
            If patternInterface = PatternInterface.RangeValue Then
                Return Me
            End If
            Return MyBase.GetPattern(patternInterface)
        End Function
public override object GetPattern(PatternInterface patternInterface)
{
    if (patternInterface == PatternInterface.RangeValue)
    {
        return this;
    }
    return base.GetPattern(patternInterface);
}

A GetPattern yöntemi de bir alt öğesi olarak belirtinbir desen sağlayıcı. Aşağıdaki kod gösterir nasıl ItemsControl transferleri kaydırma desen işleme çiftine kendi iç ScrollViewer Denetim.

public override object GetPattern(PatternInterface patternInterface)
{
    if (patternInterface == PatternInterface.Scroll)
    {
        ItemsControl owner = (ItemsControl) base.Owner;

        // ScrollHost is internal to the ItemsControl class
        if (owner.ScrollHost != null)
        {
            AutomationPeer peer = UIElementAutomationPeer.CreatePeerForElement(owner.ScrollHost);
            if ((peer != null) && (peer is IScrollProvider))
            {
                peer.EventsSource = this;
                return (IScrollProvider) peer;
            }
        }
    }
    return base.GetPattern(patternInterface);
}
Public Class Class1
    Public Overrides Function GetPattern(ByVal patternInterface__1 As PatternInterface) As Object
        If patternInterface1 = PatternInterface.Scroll Then
            Dim owner As ItemsControl = DirectCast(MyBase.Owner, ItemsControl)

            ' ScrollHost is internal to the ItemsControl class
            If owner.ScrollHost IsNot Nothing Then
                Dim peer As AutomationPeer = UIElementAutomationPeer.CreatePeerForElement(owner.ScrollHost)
                If (peer IsNot Nothing) AndAlso (TypeOf peer Is IScrollProvider) Then
                    peer.EventsSource = Me
                    Return DirectCast(peer, IScrollProvider)
                End If
            End If
        End If
        Return MyBase.GetPattern(patternInterface1)
    End Function
End Class

Desen işleme için bir alt öğesi belirtmek için bu kodu alt öğesi nesne alır, bir eş kullanarak oluşturur CreatePeerForElement yöntemi, ayarlar EventsSource Yeni eşler arası geçerli, özelliği ve yeni bir eş. Ayarlama EventsSource Otomasyon eş ağacında görünmesini alt öğesi alt öğesi üzerinde engeller ve alt öğesi tarafından harekete geçirilen tüm olayları atar belirtilen denetim kaynaklanan olarak EventsSource. ScrollViewer Denetim Otomasyon ağaçta görüntülenmez ve oluşturduğu kayan olaylar görünür kaynaklanan için ItemsControl nesne.

"Çekirdek" geçersiz kılma Yöntemleri

Otomasyon kodunun ortak eş sınıfı yöntemlerini çağırarak denetimi hakkında bilgi alır. Denetimi hakkında bilgi sağlamak için adı "Çekirdek" ile biten her yöntemini geçersiz kılın. ne zaman denetimi uygulamanız, taban Otomasyon eş sınıfı tarafından sağlanan farklıdır. En azından denetimi uygulamalısınız GetClassNameCore ve GetAutomationControlTypeCore yöntemleri, gösterildiği gibi aşağıdaki örnek.

        Protected Overrides Function GetClassNameCore() As String
            Return "NumericUpDown"
        End Function

        Protected Overrides Function GetAutomationControlTypeCore() As AutomationControlType
            Return AutomationControlType.Spinner
        End Function
protected override string GetClassNameCore()
{
    return "NumericUpDown";
}

protected override AutomationControlType GetAutomationControlTypeCore()
{
    return AutomationControlType.Spinner;
}

Uygulamanız, GetAutomationControlTypeCore döndürerek denetiminizi açıklar bir ControlType değer. Geri döndürülebilir, ancak ControlType.Custom, size iade daha özel denetim türlerinden, doğru olarak açıklar, denetim. Dönüş değeri ControlType.Custom Sağlayıcı uygulamak ek bir çalışma gerektiren UI Automation, ve UI Automation İstemci ürünleri erişemiyor öngörmeye denetim yapısını, klavye etkileşimi ve olası denetim desenleri.

Implement IsContentElementCore ve IsControlElementCore denetimi veri içeriği veya etkileşimli bir kullanıcı arabirimi (veya her ikisi) rolünde karşılayan belirtmek için yöntem. Varsayılan olarak, her iki yöntem de dönmek true. Bu ayarları bu yöntemler Otomasyon ağaç filtre uygulamak için kullanmak ekran okuyucuları gibi Otomasyon Araçları kullanılabilirliğini artırır. Sizin GetPattern arası bir alt öğesi, alt öğesi eşin işleme yöntemi transferleri desen IsControlElementCore yöntemi yanlış Gizle alt öğesi eşten dönebilirsinizOtomasyon ağaç. Örneğin, içinde kaydırma bir ListBox tarafından ele bir ScrollViewerve Otomasyon eş için PatternInterface.Scroll tarafından döndürülen GetPattern yöntemi, ScrollViewerAutomationPeer ile ilişkili ListBoxAutomationPeer.Bu nedenle, IsControlElementCore yöntemi, ScrollViewerAutomationPeer verir false, böylece ScrollViewerAutomationPeer görünmez Otomasyon ağaç.

Kendi Otomasyon eş denetimi için uygun varsayılan değerleri sağlamalıdır. Not ekleyerek denetiminizi başvuran xaml, eş uygulamalarında temel yöntemler kılabilirsiniz AutomationProperties öznitelikleri. Örneğin, aşağıdaki xaml iki özelleştirilmiş olan bir düğme oluşturur UI Automation özellikleri.

<Button AutomationProperties.Name="Special" 
    AutomationProperties.HelpText="This is a special button."/>

Desen sağlayıcıları uygulamak

Doğrudan ilgili öğenin türer, özel sağlayıcı tarafından kullanılan arabirimler açıkça bildirilmiş Control. Örneğin, aşağıdaki kod, bir eş için bildirir bir Control , uygulayan bir aralık değeri.

public class RangePeer1 : FrameworkElementAutomationPeer, IRangeValueProvider { }
Public Class RangePeer1
    Inherits FrameworkElementAutomationPeer
    Implements IRangeValueProvider
End Class

Sahibi olan denetim gibi belirli bir denetim türünden türer, RangeBase, eş ondan türetilmiş bir eşdeğer türetilmiş eş sınıfa Bu durumda, eş türetilmeli RangeBaseAutomationPeer, sağladığı temel uygulaması, IRangeValueProvider. Aşağıdaki kod, bir eşin bildirim gösterir.

public class RangePeer2 : RangeBaseAutomationPeer { }
Public Class RangePeer2
    Inherits RangeBaseAutomationPeer
End Class

Bir örnek için bkz: NumericUpDown özel denetimle tema ve UI Otomasyon desteği örnek.

Olay Yükselt

Otomasyon olaylarýna Otomasyon istemcileri abone olabilirsiniz. Özel denetimler çağırarak durumu denetlemek için değişiklikleri bildirmek gerekir RaiseAutomationEvent yöntemi. Benzer şekilde, bir özellik değeri değiştiğinde, çağrı RaisePropertyChangedEvent yöntemi. Aşağıdaki kod, eş nesneden denetim kodu içinde alın ve bir olayı başlatmak için bir yöntemini çağırın gösterilmiştir. Bir iyileştirme dinleyicilerin bu olay türü için olup olmadığını belirler. Olay dinleyicileri olduğunda yalnızca artırılarak, gereksiz yük önler ve tepki kalır denetlenmesine yardımcı olur.

            If AutomationPeer.ListenerExists(AutomationEvents.PropertyChanged) Then
                Dim peer As NumericUpDownAutomationPeer = TryCast(UIElementAutomationPeer.FromElement(nudCtrl), NumericUpDownAutomationPeer)

                If peer IsNot Nothing Then
                    peer.RaisePropertyChangedEvent(RangeValuePatternIdentifiers.ValueProperty, CDbl(oldValue), CDbl(newValue))
                End If
            End If
if (AutomationPeer.ListenerExists(AutomationEvents.PropertyChanged))
{
    NumericUpDownAutomationPeer peer = 
        UIElementAutomationPeer.FromElement(nudCtrl) as NumericUpDownAutomationPeer;

    if (peer != null)
    {
        peer.RaisePropertyChangedEvent(
            RangeValuePatternIdentifiers.ValueProperty,
            (double)oldValue,
            (double)newValue);
    }
}

Ayrıca bkz.

Kavramlar

UI Otomasyon genel bakış

Sunucu tarafı UI Otomasyon sağlayıcı uygulama

Diğer Kaynaklar

NumericUpDown özel denetimle tema ve UI Otomasyon desteği örnek

Değişiklik Geçmişi

Date

History

Reason

December 2010

Eksik Visual Basic örnekleri eklendi.

İçerik hata düzeltmesi.

Temmuz 2008

Eklenen konu.

Bilgi geliştirme.