NameScope.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Framework / System / Windows / NameScope.cs / 1 / NameScope.cs

                            /****************************************************************************\ 
*
* File: NameScope.cs
*
*  Used to store mapping information for names occuring 
*  within the logical tree section.
* 
* Copyright (C) 2005 by Microsoft Corporation.  All rights reserved. 
*
\***************************************************************************/ 

using System;
using System.Windows;
using System.Collections; 
using System.Collections.Specialized;
using System.Globalization; 
using System.Windows.Markup; 
using System.ComponentModel;
using MS.Internal; 

namespace System.Windows
{
    ///  
    /// Used to store mapping information for names occuring
    /// within the logical tree section. 
    ///  
    public class NameScope : INameScope
    { 
        #region INameScope

        /// 
        /// Register Name-Object Map 
        /// 
        /// name to be registered 
        /// object mapped to name 
        public void RegisterName(string name, object scopedElement)
        { 
            if (name == null)
                throw new ArgumentNullException("name");

            if (scopedElement == null) 
                throw new ArgumentNullException("scopedElement");
 
            if (name == String.Empty) 
                throw new ArgumentException(SR.Get(SRID.NameScopeNameNotEmptyString));
 
            if (!NameValidationHelper.IsValidIdentifierName(name))
            {
                throw new ArgumentException(SR.Get(SRID.ParserInvalidIdentifierName, name));
            } 

            if (_nameMap == null) 
            { 
                _nameMap = new HybridDictionary();
                _nameMap[name] = scopedElement; 
            }
            else
            {
                object nameContext = _nameMap[name]; 
                // first time adding the Name, set it
                if (nameContext == null) 
                { 
                    _nameMap[name] = scopedElement;
                } 
                else if (scopedElement != nameContext)
                {
                    throw new ArgumentException(SR.Get(SRID.NameScopeDuplicateNamesNotAllowed, name));
                } 
            }
 
            if( TraceNameScope.IsEnabled ) 
            {
                TraceNameScope.TraceActivityItem( TraceNameScope.RegisterName, 
                                                  this,
                                                  name,
                                                  scopedElement );
            } 

 
        } 

        ///  
        /// Unregister Name-Object Map
        /// 
        /// name to be registered
        public void UnregisterName(string name) 
        {
            if (name == null) 
                throw new ArgumentNullException("name"); 

            if (name == String.Empty) 
                throw new ArgumentException(SR.Get(SRID.NameScopeNameNotEmptyString));

            if (_nameMap != null && _nameMap[name] != null)
            { 
                _nameMap.Remove(name);
            } 
            else 
            {
                throw new ArgumentException(SR.Get(SRID.NameScopeNameNotFound, name)); 
            }


            if( TraceNameScope.IsEnabled ) 
            {
                TraceNameScope.TraceActivityItem( TraceNameScope.UnregisterName, 
                                                  this, name ); 
            }
 
        }

        /// 
        /// Find - Find the corresponding object given a Name 
        /// 
        /// Name for which context needs to be retrieved 
        /// corresponding Context if found, else null 
        public object FindName(string name)
        { 
            if (_nameMap == null || name == null || name == String.Empty)
                return null;

            return _nameMap[name]; 
        }
 
        #endregion INameScope 

        #region InternalMethods 

        internal static INameScope NameScopeFromObject(object obj)
        {
            INameScope nameScope = obj as INameScope; 
            if (nameScope == null)
            { 
                DependencyObject objAsDO = obj as DependencyObject; 
                if (objAsDO != null)
                { 
                    nameScope = GetNameScope(objAsDO);
                }
            }
 
            return nameScope;
        } 
 
        #endregion InternalMethods
 
        #region DependencyProperties

        /// 
        /// NameScope property. This is an attached property. 
        /// This property allows the dynamic attachment of NameScopes
        ///  
        public static readonly DependencyProperty NameScopeProperty 
                                                  = DependencyProperty.RegisterAttached(
                                                  "NameScope", 
                                                  typeof(INameScope),
                                                  typeof(NameScope));

        ///  
        /// Helper for setting NameScope property on a DependencyObject.
        ///  
        /// Dependency Object  to set NameScope property on. 
        /// NameScope property value.
        public static void SetNameScope(DependencyObject dependencyObject, INameScope value) 
        {
            if (dependencyObject == null)
            {
                throw new ArgumentNullException("dependencyObject"); 
            }
 
            dependencyObject.SetValue(NameScopeProperty, value); 
        }
 
        /// 
        /// Helper for reading NameScope property from a DependencyObject.
        /// 
        /// DependencyObject to read NameScope property from. 
        /// NameScope property value.
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
        public static INameScope GetNameScope(DependencyObject dependencyObject) 
        {
            if (dependencyObject == null) 
            {
                throw new ArgumentNullException("dependencyObject");
            }
 
            return ((INameScope)dependencyObject.GetValue(NameScopeProperty));
        } 
 
        #endregion DependencyProperties
 

        #region Data

        // This is a HybridDictionary of Name-Object maps 
        private HybridDictionary _nameMap;
 
        #endregion Data 
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK