StaticExtension.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Markup / StaticExtension.cs / 1305600 / StaticExtension.cs

                            /****************************************************************************\ 
*
* File: StaticExtension.cs
*
*  Class for Xaml markup extension for static field and property references. 
*
* Copyright (C) 2004 by Microsoft Corporation.  All rights reserved. 
* 
\***************************************************************************/
 
using System;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Windows.Input; 
using System.Reflection;
using MS.Internal.WindowsBase; 
using MS.Utility; 
using System.Runtime.CompilerServices;
using System.Windows.Markup; 
using System.Windows;

namespace MS.Internal.Markup
{ 
    /// 
    ///  WPF wrapper for StaticExtension.  Optimizes some common SystemResourceKeys & Commands 
    ///  
    internal class StaticExtension : System.Windows.Markup.StaticExtension
    { 
        public StaticExtension() : base() { }
        public StaticExtension(String member) : base(member) { }

        ///  
        ///  Return an object that should be set on the targetObject's targetProperty
        ///  for this markup extension.  For a StaticExtension this is a static field 
        ///  or property value. 
        /// 
        /// Object that can provide services for the markup extension. 
        /// 
        ///  The object to set on this property.
        /// 
        public override object ProvideValue(IServiceProvider serviceProvider) 
        {
            if (Member == null) 
            { 
                throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionStaticMember));
            } 

            object value;
            if (MemberType != null)
            { 
                value = SystemResourceKey.GetSystemResourceKey(MemberType.Name + "." + Member);
                if (value != null) 
                { 
                    return value;
                } 
            }
            else
            {
                value = SystemResourceKey.GetSystemResourceKey(Member); 
                if (value != null)
                { 
                    return value; 
                }
 
                // Validate the _member

                int dotIndex = Member.IndexOf('.');
                if (dotIndex < 0) 
                {
                    throw new ArgumentException(SR.Get(SRID.MarkupExtensionBadStatic, Member)); 
                } 

                // Pull out the type substring (this will include any XML prefix, e.g. "av:Button") 

                string typeString = Member.Substring(0, dotIndex);
                if (typeString == string.Empty)
                { 
                    throw new ArgumentException(SR.Get(SRID.MarkupExtensionBadStatic, Member));
                } 
 
                // Get the IXamlTypeResolver from the service provider
 
                if (serviceProvider == null)
                {
                    throw new ArgumentNullException("serviceProvider");
                } 

                IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver; 
                if (xamlTypeResolver == null) 
                {
                    throw new ArgumentException(SR.Get(SRID.MarkupExtensionNoContext, GetType().Name, "IXamlTypeResolver")); 
                }

                // Use the type resolver to get a Type instance
 
                MemberType = xamlTypeResolver.Resolve(typeString);
 
                // Get the member name substring 

                Member = Member.Substring(dotIndex + 1, Member.Length - dotIndex - 1); 
            }

            value = CommandConverter.GetKnownControlCommand(MemberType, Member);
            if (value != null) 
            {
                return value; 
            } 

            return base.ProvideValue(serviceProvider); 
        }
    }
}
 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
/****************************************************************************\ 
*
* File: StaticExtension.cs
*
*  Class for Xaml markup extension for static field and property references. 
*
* Copyright (C) 2004 by Microsoft Corporation.  All rights reserved. 
* 
\***************************************************************************/
 
using System;
using System.ComponentModel;
using System.ComponentModel.Design.Serialization;
using System.Windows.Input; 
using System.Reflection;
using MS.Internal.WindowsBase; 
using MS.Utility; 
using System.Runtime.CompilerServices;
using System.Windows.Markup; 
using System.Windows;

namespace MS.Internal.Markup
{ 
    /// 
    ///  WPF wrapper for StaticExtension.  Optimizes some common SystemResourceKeys & Commands 
    ///  
    internal class StaticExtension : System.Windows.Markup.StaticExtension
    { 
        public StaticExtension() : base() { }
        public StaticExtension(String member) : base(member) { }

        ///  
        ///  Return an object that should be set on the targetObject's targetProperty
        ///  for this markup extension.  For a StaticExtension this is a static field 
        ///  or property value. 
        /// 
        /// Object that can provide services for the markup extension. 
        /// 
        ///  The object to set on this property.
        /// 
        public override object ProvideValue(IServiceProvider serviceProvider) 
        {
            if (Member == null) 
            { 
                throw new InvalidOperationException(SR.Get(SRID.MarkupExtensionStaticMember));
            } 

            object value;
            if (MemberType != null)
            { 
                value = SystemResourceKey.GetSystemResourceKey(MemberType.Name + "." + Member);
                if (value != null) 
                { 
                    return value;
                } 
            }
            else
            {
                value = SystemResourceKey.GetSystemResourceKey(Member); 
                if (value != null)
                { 
                    return value; 
                }
 
                // Validate the _member

                int dotIndex = Member.IndexOf('.');
                if (dotIndex < 0) 
                {
                    throw new ArgumentException(SR.Get(SRID.MarkupExtensionBadStatic, Member)); 
                } 

                // Pull out the type substring (this will include any XML prefix, e.g. "av:Button") 

                string typeString = Member.Substring(0, dotIndex);
                if (typeString == string.Empty)
                { 
                    throw new ArgumentException(SR.Get(SRID.MarkupExtensionBadStatic, Member));
                } 
 
                // Get the IXamlTypeResolver from the service provider
 
                if (serviceProvider == null)
                {
                    throw new ArgumentNullException("serviceProvider");
                } 

                IXamlTypeResolver xamlTypeResolver = serviceProvider.GetService(typeof(IXamlTypeResolver)) as IXamlTypeResolver; 
                if (xamlTypeResolver == null) 
                {
                    throw new ArgumentException(SR.Get(SRID.MarkupExtensionNoContext, GetType().Name, "IXamlTypeResolver")); 
                }

                // Use the type resolver to get a Type instance
 
                MemberType = xamlTypeResolver.Resolve(typeString);
 
                // Get the member name substring 

                Member = Member.Substring(dotIndex + 1, Member.Length - dotIndex - 1); 
            }

            value = CommandConverter.GetKnownControlCommand(MemberType, Member);
            if (value != null) 
            {
                return value; 
            } 

            return base.ProvideValue(serviceProvider); 
        }
    }
}
 

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