private void LoadState(object node) { UIElement uielement = node as UIElement; if (uielement == null) { return; } int persistId = uielement.PersistId; if (persistId != 0) { if (this.HasSubStreams(persistId)) { ArrayList subStreams = this.GetSubStreams(persistId); this.LoadSubStreams(uielement, subStreams); } if (this._customJournaledObjects != null && this._customJournaledObjects.Contains(persistId)) { CustomJournalStateInternal state = (CustomJournalStateInternal)this._customJournaledObjects[persistId]; IJournalState journalState = node as IJournalState; if (journalState != null) { journalState.RestoreJournalState(state); } } } }
private void SaveState(object node) { UIElement uielement = node as UIElement; if (uielement == null) { return; } int persistId = uielement.PersistId; if (persistId != 0) { ArrayList arrayList = this.SaveSubStreams(uielement); if (arrayList != null && !this._subStreams.Contains(persistId)) { this._subStreams[persistId] = arrayList; } IJournalState journalState = node as IJournalState; if (journalState != null) { object journalState2 = journalState.GetJournalState(JournalReason.NewContentNavigation); if (journalState2 != null) { if (this._customJournaledObjects == null) { this._customJournaledObjects = new HybridDictionary(2); } if (!this._customJournaledObjects.Contains(persistId)) { this._customJournaledObjects[persistId] = journalState2; } } } } }
private void LoadState(object node) { UIElement element = node as UIElement; if (element == null) { return; } #pragma warning disable 618 int persistId = element.PersistId; #pragma warning restore 618 // Due to if (persistId != 0) { if (this.HasSubStreams(persistId)) { // Get the properties to restore ArrayList properties = this.GetSubStreams(persistId); LoadSubStreams(element, properties); } if (_customJournaledObjects != null && _customJournaledObjects.Contains(persistId)) { CustomJournalStateInternal state = (CustomJournalStateInternal)_customJournaledObjects[persistId]; Debug.Assert(state != null); IJournalState customJournalingObject = node as IJournalState; // // For below two scenarios, JournalData cannot be restored successfully. For now, we just // simply ignore it and don't throw exception. // // A. After the tree was created from xaml/baml stream, some elements might be replaced // programatically with new elements which could be created from other xaml/baml by Parser. // // B. If the loose xaml file has been changed since the journal data was created // // if (customJournalingObject != null) { customJournalingObject.RestoreJournalState(state); } } } }
private void SaveState(object node) { UIElement element = node as UIElement; if (element == null) { return; } // Due to #pragma warning disable 618 int persistId = element.PersistId; #pragma warning restore 618 if (persistId != 0) { ArrayList subStreams = this.SaveSubStreams(element); if (subStreams != null) { // // If one element in the tree is replaced with a new element which is created // from a xaml/baml stream programatically, this new element and all its descendent nodes // would have another set of PersistId starting from 1, it would end up with two or more // elements in the same page share the same PersistId. We cannot guarantee to restore // journaldata for the newly added elements when doing the journaling navigation. // // So to do some level protection to avoid application crash, the code doesn't update the // journaldata for that element id if the data was set already. // // if (!_subStreams.Contains(persistId)) { _subStreams[persistId] = subStreams; } } IJournalState customJournalingObject = node as IJournalState; if (customJournalingObject != null) { object customState = customJournalingObject.GetJournalState(JournalReason.NewContentNavigation); if (customState != null) { if (_customJournaledObjects == null) { _customJournaledObjects = new HybridDictionary(2); } // // Again, We cannot guarantee the PeristId of all elements in the same page are unique. // Some IJouralState aware node such as Frame, FlowDocumentPageViewer could be added // programatically after the page is created from baml stream, the new added node could also // be created from baml/xaml stream by Parser. // if (!_customJournaledObjects.Contains(persistId)) { _customJournaledObjects[persistId] = customState; } } } } }
private void SaveState(object node) { UIElement element = node as UIElement; if (element == null) { return; } // Due to bug 1282529, PersistId can be null. Only XAML/BAML-loaded elements have it. // Besides for PageFunctions journaled by type, the PersistId check below is needed // because elements might have been added to the tree after loading from XAML/BAML. #pragma warning disable 618 int persistId = element.PersistId; #pragma warning restore 618 if (persistId != 0) { ArrayList subStreams = this.SaveSubStreams(element); if (subStreams != null) { // // If one element in the tree is replaced with a new element which is created // from a xaml/baml stream programatically, this new element and all its descendent nodes // would have another set of PersistId starting from 1, it would end up with two or more // elements in the same page share the same PersistId. We cannot guarantee to restore // journaldata for the newly added elements when doing the journaling navigation. // // So to do some level protection to avoid application crash, the code doesn't update the // journaldata for that element id if the data was set already. // // We cannot track whether the element with the specific PersistId is created from // the original xaml/baml stream, or is added later from another xaml/baml stream. // More efficient solution will be invented in next version. // if (!_subStreams.Contains(persistId)) { _subStreams[persistId] = subStreams; } } IJournalState customJournalingObject = node as IJournalState; if (customJournalingObject != null) { object customState = customJournalingObject.GetJournalState(JournalReason.NewContentNavigation); if (customState != null) { if (_customJournaledObjects == null) { _customJournaledObjects = new HybridDictionary(2); } // // Again, We cannot guarantee the PeristId of all elements in the same page are unique. // Some IJouralState aware node such as Frame, FlowDocumentPageViewer could be added // programatically after the page is created from baml stream, the new added node could also // be created from baml/xaml stream by Parser. // if (!_customJournaledObjects.Contains(persistId)) { _customJournaledObjects[persistId] = customState; } } } } }