InheritanceContextHelper.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Base / MS / Internal / InheritanceContextHelper.cs / 1305600 / InheritanceContextHelper.cs

                            /****************************************************************************\ 
*
* File: InheritanceContextHelper.cs
*
* This file holds a helper class for DO subclasses that implement an 
* inheritance context.
* 
* Copyright (C) by Microsoft Corporation.  All rights reserved. 
*
\***************************************************************************/ 


using System;
using System.Windows; 
using MS.Internal.WindowsBase;
 
namespace MS.Internal 
{
    internal static class InheritanceContextHelper 
    {


        //------------------------------------------------------------------- 
        //
        //  ProvideContextForObject 
        // 
        //  Tell a DO that it has a new inheritance context available.
        // 
        //-------------------------------------------------------------------

        [FriendAccessAllowed] // Built into Core, also used by Framework.
        internal static void ProvideContextForObject( 
            DependencyObject context,
            DependencyObject newValue ) 
        { 
            if (context != null)
            { 
                context.ProvideSelfAsInheritanceContext(newValue, null);
            }
        }
 
        //-------------------------------------------------------------------
        // 
        //  RemoveContextFromObject 
        //
        //  Tell a DO that it has lost its inheritance context. 
        //
        //--------------------------------------------------------------------

        [FriendAccessAllowed] // Built into Base, also used by Framework. 
        internal static void RemoveContextFromObject(
            DependencyObject context, 
            DependencyObject oldValue ) 
        {
            if (context != null && oldValue.InheritanceContext == context) 
            {
                context.RemoveSelfAsInheritanceContext(oldValue, null);
            }
        } 

 
 
        //-------------------------------------------------------------------
        // 
        //  AddInheritanceContext
        //
        //  Implementation to receive a new inheritance context
        // 
        //--------------------------------------------------------------------
 
        [FriendAccessAllowed] // Built into Base, also used by Framework. 
        internal static void AddInheritanceContext(DependencyObject newInheritanceContext,
                                                              DependencyObject value, 
                                                              ref bool hasMultipleInheritanceContexts,
                                                              ref DependencyObject inheritanceContext )
        {
            // ignore the request when the new context is the same as the old, 
            // or when there are already multiple contexts
            if (newInheritanceContext != inheritanceContext && 
                !hasMultipleInheritanceContexts) 
            {
                if (inheritanceContext == null || newInheritanceContext == null) 
                {
                    // Pick up the new context
                    inheritanceContext = newInheritanceContext;
                } 
                else
                { 
                    // We are now being referenced from multiple 
                    // places, clear the context
                    hasMultipleInheritanceContexts = true; 
                    inheritanceContext = null;
                }

                value.OnInheritanceContextChanged(EventArgs.Empty); 
            }
        } 
 

        //-------------------------------------------------------------------- 
        //
        //  RemoveInheritanceContext
        //
        //  Implementation to remove an old inheritance context 
        //
        //------------------------------------------------------------------- 
 
        [FriendAccessAllowed] // Built into Base, also used by Framework.
        internal static void RemoveInheritanceContext(DependencyObject oldInheritanceContext, 
                                                              DependencyObject value,
                                                              ref bool hasMultipleInheritanceContexts,
                                                              ref DependencyObject inheritanceContext )
        { 
            // ignore the request when the given context doesn't match the old one,
            // or when there are already multiple contexts 
            if (oldInheritanceContext == inheritanceContext && 
                !hasMultipleInheritanceContexts)
            { 
                // clear the context
                inheritanceContext = null;
                value.OnInheritanceContextChanged(EventArgs.Empty);
            } 
        }
    } 
} 


// 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