private string GetExtensionValueString(IOptimizedMarkupExtension optimizedMarkupExtensionRecord)
        {
            string valueString = string.Empty;
            short memberId = optimizedMarkupExtensionRecord.ValueId;
            short extensionId = optimizedMarkupExtensionRecord.ExtensionTypeId;

            switch (extensionId)
            {
                case (short)KnownElements.StaticExtension:
                    valueString = GetStaticExtensionValueString(memberId);
                    break;

                case (short)KnownElements.TemplateBindingExtension:
                    valueString = GetExtensionPrefixString("TemplateBinding");
                    valueString += GetTemplateBindingExtensionValueString(memberId);
                    break;

                case (short)KnownElements.DynamicResourceExtension:
                    valueString = GetExtensionPrefixString("DynamicResource");
                    valueString += GetInnerExtensionValueString(optimizedMarkupExtensionRecord);
                    break;

                case (short)KnownElements.StaticResourceExtension:
                    valueString = GetExtensionPrefixString("StaticResource");
                    valueString += GetInnerExtensionValueString(optimizedMarkupExtensionRecord);
                    break;
            }

            return valueString;
        }
        internal virtual object GetExtensionValue(
            IOptimizedMarkupExtension optimizedMarkupExtensionRecord,
            string                    propertyName)
        { 
            object innerExtensionValue = null;
            object valueObject = null; 
            short memberId = optimizedMarkupExtensionRecord.ValueId; 
            short extensionTypeId = optimizedMarkupExtensionRecord.ExtensionTypeId;
 
            switch (extensionTypeId)
            {
                case (short)KnownElements.StaticExtension:
                    valueObject = GetStaticExtensionValue(memberId); 
                    break;
 
                case (short)KnownElements.DynamicResourceExtension: 
                    innerExtensionValue = GetInnerExtensionValue(optimizedMarkupExtensionRecord);
                    valueObject = new DynamicResourceExtension(innerExtensionValue); 
                    break;

                case (short)KnownElements.StaticResourceExtension:
                    innerExtensionValue = GetInnerExtensionValue(optimizedMarkupExtensionRecord); 
                    valueObject = new StaticResourceExtension(innerExtensionValue);
                    break; 
            } 

            if (valueObject == null) 
            {
                string valueTypeName = string.Empty;

                switch (extensionTypeId) 
                {
                    case (short)KnownElements.StaticExtension: 
                        valueTypeName = typeof(StaticExtension).FullName; 
                        break;
                    case (short)KnownElements.DynamicResourceExtension: 
                        valueTypeName = typeof(DynamicResourceExtension).FullName;
                        break;
                    case (short)KnownElements.StaticResourceExtension:
                        valueTypeName = typeof(StaticResourceExtension).FullName; 
                        break;
                } 
 
                ThrowException(SRID.ParserCannotConvertPropertyValue, propertyName, valueTypeName);
            } 

            return valueObject;
        }
        private string GetInnerExtensionValueString(IOptimizedMarkupExtension optimizedMarkupExtensionRecord)
        {
            string valueString = string.Empty;
            short memberId = optimizedMarkupExtensionRecord.ValueId;

            if (optimizedMarkupExtensionRecord.IsValueTypeExtension)
            {
                valueString = GetTypeValueString(memberId);
            }
            else if (optimizedMarkupExtensionRecord.IsValueStaticExtension)
            {
                valueString = GetStaticExtensionValueString(memberId);
            }
            else
            {
                valueString = MapTable.GetStringFromStringId(memberId);
            }

            return valueString + "}";
        }
        private object GetInnerExtensionValue(IOptimizedMarkupExtension optimizedMarkupExtensionRecord)
        {
            object valueObject = null;
            short memberId = optimizedMarkupExtensionRecord.ValueId; 

            if (optimizedMarkupExtensionRecord.IsValueTypeExtension) 
            { 
                valueObject = MapTable.GetTypeFromId(memberId);
            } 
            else if (optimizedMarkupExtensionRecord.IsValueStaticExtension)
            {
                valueObject = GetStaticExtensionValue(memberId);
            } 
            else
            { 
                valueObject = MapTable.GetStringFromStringId(memberId); 
            }
 
            return valueObject;
        }