File: src\Framework\System\ComponentModel\DesignerProperties.cs
Project: wpf\PresentationFramework.csproj (PresentationFramework)
//---------------------------------------------------------------------------
//
// <copyright file=DesignerProperties.cs company=Microsoft>
//    Copyright (C) Microsoft Corporation.  All rights reserved.
// </copyright>
// 
//
// Description: 
//              Provides attached properties used to communicate with a designer.
//              See spec at: http://team/sites/Cider/Cross%20Team/Design%20Mode%20Property.doc
// 
// History:  
//  7/07/2006: Microsoft, Created
//
//---------------------------------------------------------------------------
 
namespace System.ComponentModel
{
    using System;
    using System.Windows;
    using MS.Internal.KnownBoxes;
 
    /// <summary>
    /// The DesignerProperties class provides attached properties that can be used to 
    /// query the state of a control when it is running in a designer.   Designer tools 
    /// will set values for properties on objects that are running in the designer.
    /// </summary>
    public static class DesignerProperties
    {
        
        //------------------------------------------------------
        //
        //  Public Fields
        //
        //------------------------------------------------------
 
 
        /// <summary>
        /// Identifies the DesignerProperties.IsInDesignMode dependency property.  
        /// This field is read only.    
        /// </summary>
        public static readonly DependencyProperty IsInDesignModeProperty = 
            DependencyProperty.RegisterAttached(
                 "IsInDesignMode",
                 typeof(bool), typeof(DesignerProperties),
                 new FrameworkPropertyMetadata(BooleanBoxes.FalseBox, 
                 FrameworkPropertyMetadataOptions.Inherits | 
                 FrameworkPropertyMetadataOptions.OverridesInheritanceBehavior));        
 
 
        //------------------------------------------------------
        //
        //  Public Methods
        //
        //------------------------------------------------------
 
 
        /// <summary>
        /// Returns the attached property IsInDesignMode value for the given dependency object.
        ///
        /// This property will return true if the given element is running in the context of a
        /// designer.  Component developers may use this property to perform different logic 
        /// in the context of a designer than they would when running in an application.  For 
        /// example, expensive validation or connecting to an external resource like a server 
        /// may not make sense while an application is being developed.
        ///
        /// Designers may change the value of this property to move a control from design 
        /// mode to run mode and back.  Components that make changes to their state based 
        /// on the value of this property should override the virtual OnPropertyChanged method 
        /// and update their state if the IsInDesignMode property value changes.
        /// </summary>
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public static bool GetIsInDesignMode(DependencyObject element)
        {
            if (element == null) throw new ArgumentNullException("element");
            return (bool)element.GetValue(IsInDesignModeProperty);
        }        
 
 
        /// <summary>
        /// Sets the value of the IsInDesignMode attached property for the given dependency object.
        /// </summary>
        public static void SetIsInDesignMode(DependencyObject element, bool value)
        {
            if (element == null) throw new ArgumentNullException("element");
            element.SetValue(IsInDesignModeProperty, value);
        }        
    }
}