File: System.Activities.Presentation\System\Activities\Presentation\Base\Core\Internal\PropertyEditing\Automation\AutomatedChoiceEditor.cs
Project: ndp\cdf\src\NetFx40\Tools\System.Activities.Presentation.csproj (System.Activities.Presentation)
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//----------------------------------------------------------------
namespace System.Activities.Presentation.Internal.PropertyEditing.Automation 
{
    using System;
    using System.Windows;
    using System.Windows.Automation.Peers;
    using System.Windows.Data;
 
    using System.Activities.Presentation.Internal.PropertyEditing.FromExpression.Framework.ValueEditors;
 
    // <summary>
    // Blend's ChoiceEditor that we augment with our an AutomationPeer
    // </summary>
    internal class AutomatedChoiceEditor : ChoiceEditor 
    {
 
        // <summary>
        // AutomationValueConverter is used to expose an IValueConverter that the
        // ChoiceEditorAutomationPeer uses to convert the selected item into a
        // string exposed through the automation APIs.  If no converver is specified
        // (default), we call ToString() on the item.
        // </summary>
        public static DependencyProperty AutomationValueConverterProperty = DependencyProperty.Register(
            "AutomationValueConverter",
            typeof(IValueConverter),
            typeof(AutomatedChoiceEditor),
            new PropertyMetadata(null));
 
        internal event DependencyPropertyChangedEventHandler DependencyPropertyChanged;
 
        // <summary>
        // Gets or set AutomationValueConverter
        // </summary>
        public IValueConverter AutomationValueConverter 
        {
            get { return (IValueConverter)this.GetValue(AutomationValueConverterProperty); }
            set { this.SetValue(AutomationValueConverterProperty, value); }
        }
 
        protected override AutomationPeer OnCreateAutomationPeer() 
        {
            return new HiddenUIElementAutomationPeer(this);
        }
 
        // Expose DependencyPropertyChanged event to which the AutomationPeer listens, broadcasting
        // its own set of automation events as needed.
        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
        {
            if (DependencyPropertyChanged != null)
            {
                DependencyPropertyChanged(this, e);
            }
 
            base.OnPropertyChanged(e);
        }
    }
}