/// <summary>
 /// Constructor</summary>
 /// <param name="editingControlOwner">Interface for property editing control owners</param>
 /// <param name="descriptor">Property descriptor</param>
 /// <param name="transactionContext">Interface for transaction contexts</param>
 /// <param name="contextRegistry">Context registry</param>
 public PropertyEditorControlContext(
     IPropertyEditingControlOwner editingControlOwner,
     PropertyDescriptor descriptor,
     ITransactionContext transactionContext,
     IContextRegistry contextRegistry)
     : this(editingControlOwner, descriptor, transactionContext)
 {
     m_contextRegistry = contextRegistry;
 }
 /// <summary>
 /// Constructor</summary>
 /// <param name="editingControlOwner">Interface for property editing control owners</param>
 /// <param name="descriptor">Property descriptor</param>
 /// <param name="transactionContext">Interface for transaction contexts</param>
 /// <param name="contextRegistry">Context registry</param>
 public PropertyEditorControlContext(
     IPropertyEditingControlOwner editingControlOwner,
     PropertyDescriptor descriptor,
     ITransactionContext transactionContext,
     IContextRegistry contextRegistry)
     : this(editingControlOwner, descriptor, transactionContext)
 {
     m_contextRegistry = contextRegistry;
 }
        /// <summary>
        /// Constructor, used only by PropertyView</summary>
        /// <param name="editingControlOwner">Interface for property editing control owners</param>
        /// <param name="descriptor">Property descriptor for property being edited</param>
        /// <param name="transactionContext">Interface for transaction contexts</param>
        public PropertyEditorControlContext(
            IPropertyEditingControlOwner editingControlOwner,
            PropertyDescriptor descriptor,
            ITransactionContext transactionContext)
        {
            m_editingControlOwner = editingControlOwner;
            m_descriptor = descriptor;
            m_transactionContext = transactionContext;

            // MultiPropertyDescriptors need the SelectedObjects delegate
            // to be able to retrieve the selection. They need the delegate
            // rather than just the current selection because of control caching.
            var desc = descriptor as Sce.Atf.Dom.MultiPropertyDescriptor;
            if (desc != null)
                desc.GetSelectionFunc = () => SelectedObjects;
        }
        /// <summary>
        /// Constructor, used only by PropertyView</summary>
        /// <param name="editingControlOwner">Interface for property editing control owners</param>
        /// <param name="descriptor">Property descriptor for property being edited</param>
        /// <param name="transactionContext">Interface for transaction contexts</param>
        public PropertyEditorControlContext(
            IPropertyEditingControlOwner editingControlOwner,
            PropertyDescriptor descriptor,
            ITransactionContext transactionContext)
        {
            m_editingControlOwner = editingControlOwner;
            m_descriptor          = descriptor;
            m_transactionContext  = transactionContext;

            // MultiPropertyDescriptors need the SelectedObjects delegate
            // to be able to retrieve the selection. They need the delegate
            // rather than just the current selection because of control caching.
            var desc = descriptor as Sce.Atf.Dom.MultiPropertyDescriptor;

            if (desc != null)
            {
                desc.GetSelectionFunc = () => SelectedObjects;
            }
        }