예제 #1
0
 public void Clear()
 {
     _handled           = false;
     _mode              = DeferringMode.Off;
     _deferredList      = null;
     _deferredTreeDepth = -1;
 }
예제 #2
0
        public XamlNodeList CollectTemplateList()
        {
            XamlNodeList retValue = _deferredList;

            _deferredList = null;
            _mode         = DeferringMode.Off;
            return(retValue);
        }
예제 #3
0
 private void StartDeferredList()
 {
     // the list may have been created already by SetLineInfo
     if (_deferredList == null)
     {
         _deferredList             = new XamlNodeList(_context.SchemaContext);
         _deferredWriter           = _deferredList.Writer;
         _deferredLineInfoConsumer = _deferredWriter as IXamlLineInfoConsumer;
         _deferredTreeDepth        = 0;
     }
 }
예제 #4
0
        public override void WriteValue(object value)
        {
            _handled = false;
            switch (_mode)
            {
            case DeferringMode.Off:
                break;

            case DeferringMode.TemplateReady:
                throw new XamlInternalException(SR.Get(SRID.TemplateNotCollected, "WriteValue"));

            case DeferringMode.TemplateStarting:
                // This handles the case of SM template; V object; EM
                Debug.Assert(_deferredTreeDepth == 0);
                if (value is XamlNodeList)
                {
                    _deferredList = (XamlNodeList)value;
                    _mode         = DeferringMode.TemplateReady;
                    _handled      = true;
                }
                else
                {
                    StartDeferredList();
                    _mode = DeferringMode.TemplateDeferring;
                    goto case DeferringMode.TemplateDeferring;
                }
                break;

            case DeferringMode.TemplateDeferring:
                _deferredWriter.WriteValue(value);
                _handled = true;
                break;

            default:
                throw new XamlInternalException(SR.Get(SRID.MissingCase, _mode.ToString(), "WriteValue"));
            }
        }