示例#1
0
        public virtual ITemplate GetTemplate(String templateName)
        {
            Debug.Assert(this is ITemplateable);
            ITemplate t = null;

            if (_deviceSpecific != null)
            {
                t = _deviceSpecific.GetTemplate(templateName);
            }

            if (t == null)
            {
                Style referredStyle = Style.ReferredStyle;
                if (referredStyle != null)
                {
                    t = referredStyle.GetTemplate(templateName);
                }
            }

            return(t);
        }
示例#2
0
        internal ITemplate GetTemplateInternal(String templateName, Hashtable stylesEncountered)
        {
            ITemplate t = null;

            if (_deviceSpecific != null)
            {
                t = (ITemplate)_deviceSpecific.GetTemplate(templateName);
            }

            Style referredStyle = ReferredStyle;

            if (t == null && referredStyle != null)
            {
                // Check for cyclical style references.
                if (stylesEncountered == null)
                {
                    stylesEncountered = new Hashtable();
                }
                if (stylesEncountered.ContainsKey(referredStyle))
                {
                    if (_control.MobilePage != null && _control.MobilePage.DesignMode)
                    {
                        return(null);
                    }
                    else
                    {
                        throw new Exception(SR.GetString(SR.Style_CircularReference, this.Name));
                    }
                }

                // No cycle detected.
                stylesEncountered[referredStyle] = true;
                t = referredStyle.GetTemplateInternal(templateName, stylesEncountered);
            }

            return(t);
        }