File: System.Activities.Presentation\System\Activities\Presentation\Base\Core\Internal\PropertyEditing\Selection\PropertySelectionStop.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.Selection 
{
    using System;
    using System.Globalization;
    using System.Activities.Presentation.PropertyEditing;
    using System.Activities.Presentation;
 
    // <summary>
    // Helper class used to manage the selection stop behavior of a given PropertyContainer.
    // All it really does is expose the SelectionPath leading to its contained PropertyContainer.
    // </summary>
    internal class PropertySelectionStop : ISelectionStop 
    {
 
        private PropertyEntry _property;
        private SelectionPath _selectionPath;
 
        // <summary>
        // Creates a new PropertySelectionStop wrapping around the specified PropertyEntry
        // </summary>
        // <param name="property">PropertyEntry to wrap around</param>
        public PropertySelectionStop(PropertyEntry property) 
        {
            if (property == null) 
            {
                throw FxTrace.Exception.ArgumentNull("property");
            }
            _property = property;
        }
 
        // <summary>
        // Gets true, throws on set
        // </summary>
        public bool IsExpanded 
        {
            get { return true; }
            set { throw FxTrace.Exception.AsError(new InvalidOperationException()); }
        }
 
        // <summary>
        // Gets false
        // </summary>
        public bool IsExpandable 
        {
            get { return false; }
        }
 
        // <summary>
        // Gets a SelectionPath that leads to the contained PropertyEntry
        // </summary>
        public SelectionPath Path 
        {
            get {
                if (_selectionPath == null)
                {
                    _selectionPath = PropertySelectionPathInterpreter.Instance.ConstructSelectionPath(_property);
                }
 
                return _selectionPath;
            }
        }
 
        // <summary>
        // Gets a description of the contained property
        // to expose through automation
        // </summary>
        public string Description 
        {
            get {
                return string.Format(
                    CultureInfo.CurrentCulture,
                    Properties.Resources.PropertyEditing_SelectionStatus_Property,
                    _property.PropertyName);
 
            }
        }
    }
}