Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Markup / Baml2006 / DeferredBinaryDeserializerExtension.cs / 1305600 / DeferredBinaryDeserializerExtension.cs
using System; using System.Collections.Generic; using System.Text; using System.Windows.Markup; using System.IO; using System.Windows.Media; using MS.Internal; using System.Windows.Media.Media3D; using System.ComponentModel; namespace System.Windows.Baml2006 { internal class DeferredBinaryDeserializerExtension : MarkupExtension { private IFreezeFreezables _freezer; private bool _canFreeze; private readonly BinaryReader _reader; private readonly Stream _stream; private readonly int _converterId; public DeferredBinaryDeserializerExtension(IFreezeFreezables freezer, BinaryReader reader, int converterId, int dataByteSize) { _freezer = freezer; // We need to evaluate this immediately since ProvideValue may be called much later. _canFreeze = freezer.FreezeFreezables; byte[] bytes = reader.ReadBytes(dataByteSize); _stream = new MemoryStream(bytes); _reader = new BinaryReader(_stream); _converterId = converterId; } public override object ProvideValue(IServiceProvider serviceProvider) { _stream.Position = 0; switch (_converterId) { case Baml2006SchemaContext.KnownTypes.XamlBrushSerializer: return System.Windows.Media.SolidColorBrush.DeserializeFrom(_reader, new DeferredBinaryDeserializerExtensionContext(serviceProvider, _freezer, _canFreeze)); case Baml2006SchemaContext.KnownTypes.XamlPathDataSerializer: return Parsers.DeserializeStreamGeometry(_reader); case Baml2006SchemaContext.KnownTypes.XamlPoint3DCollectionSerializer: return Point3DCollection.DeserializeFrom(_reader); case Baml2006SchemaContext.KnownTypes.XamlPointCollectionSerializer: return PointCollection.DeserializeFrom(_reader); case Baml2006SchemaContext.KnownTypes.XamlVector3DCollectionSerializer: return Vector3DCollection.DeserializeFrom(_reader); default: throw new NotImplementedException(); } } private class DeferredBinaryDeserializerExtensionContext : ITypeDescriptorContext, IFreezeFreezables { private IServiceProvider _serviceProvider; private IFreezeFreezables _freezer; private bool _canFreeze; public DeferredBinaryDeserializerExtensionContext(IServiceProvider serviceProvider, IFreezeFreezables freezer, bool canFreeze) { _freezer = freezer; _canFreeze = canFreeze; _serviceProvider = serviceProvider; } object IServiceProvider.GetService(Type serviceType) { if (serviceType == typeof(IFreezeFreezables)) { return this; } return _serviceProvider.GetService(serviceType); } #region ITypeDescriptorContext Methods // ITypeDescriptorContext derives from IServiceProvider. void ITypeDescriptorContext.OnComponentChanged() { } bool ITypeDescriptorContext.OnComponentChanging() { return false; } IContainer ITypeDescriptorContext.Container { get { return null; } } object ITypeDescriptorContext.Instance { get { return null; } } PropertyDescriptor ITypeDescriptorContext.PropertyDescriptor { get { return null; } } #endregion #region IFreezeFreezables Members bool IFreezeFreezables.FreezeFreezables { get { return _canFreeze; } } bool IFreezeFreezables.TryFreeze(string value, Freezable freezable) { return _freezer.TryFreeze(value, freezable); } Freezable IFreezeFreezables.TryGetFreezable(string value) { return _freezer.TryGetFreezable(value); } #endregion } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ChangeBlockUndoRecord.cs
- ReliabilityContractAttribute.cs
- EntityWrapper.cs
- ListBox.cs
- DetailsViewDeletedEventArgs.cs
- StringResourceManager.cs
- DesignerDataView.cs
- LinkButton.cs
- XPathSingletonIterator.cs
- IntPtr.cs
- DataGridRowClipboardEventArgs.cs
- Property.cs
- BindingMemberInfo.cs
- ConnectionPoint.cs
- ListControl.cs
- IdentityReference.cs
- ObjectStateManager.cs
- DataControlField.cs
- TextElementEditingBehaviorAttribute.cs
- DebugHandleTracker.cs
- MemoryRecordBuffer.cs
- LambdaCompiler.Logical.cs
- SqlTopReducer.cs
- RightsManagementInformation.cs
- BridgeDataReader.cs
- WebProxyScriptElement.cs
- RegexCompilationInfo.cs
- Soap11ServerProtocol.cs
- ADRoleFactoryConfiguration.cs
- PassportAuthenticationEventArgs.cs
- RegexReplacement.cs
- Thickness.cs
- NotifyIcon.cs
- HttpServerUtilityBase.cs
- BitmapInitialize.cs
- CheckBoxRenderer.cs
- DeclarationUpdate.cs
- SecurityRuntime.cs
- AsymmetricSignatureDeformatter.cs
- DataGridViewCellLinkedList.cs
- HtmlLinkAdapter.cs
- DurationConverter.cs
- SemaphoreFullException.cs
- SnapLine.cs
- AnnotationStore.cs
- MsmqReceiveHelper.cs
- KnownTypeDataContractResolver.cs
- Symbol.cs
- SmiEventStream.cs
- CombinedGeometry.cs
- ZipIOFileItemStream.cs
- ToolStripMenuItem.cs
- Duration.cs
- BinaryMethodMessage.cs
- SoapAttributes.cs
- SocketInformation.cs
- SiteMembershipCondition.cs
- CodeStatementCollection.cs
- ListChangedEventArgs.cs
- PersonalizablePropertyEntry.cs
- AddingNewEventArgs.cs
- EncodedStreamFactory.cs
- SizeF.cs
- ToolStripSeparator.cs
- BindingCompleteEventArgs.cs
- HttpCacheVaryByContentEncodings.cs
- figurelengthconverter.cs
- VerificationAttribute.cs
- InstancePersistenceEvent.cs
- Part.cs
- DataViewManagerListItemTypeDescriptor.cs
- MasterPageParser.cs
- CustomAttributeFormatException.cs
- TransactionsSectionGroup.cs
- XmlReturnReader.cs
- GenerateHelper.cs
- QueryOperationResponseOfT.cs
- ExplicitDiscriminatorMap.cs
- sitestring.cs
- UInt16Storage.cs
- DefaultAsyncDataDispatcher.cs
- Scene3D.cs
- EventLogPermissionEntry.cs
- ContextDataSourceView.cs
- CacheEntry.cs
- WebUtil.cs
- SecurityAccessDeniedException.cs
- MenuItem.cs
- TypeDescriptor.cs
- SafeSecurityHandles.cs
- ProvideValueServiceProvider.cs
- SrgsText.cs
- Light.cs
- Int64AnimationBase.cs
- StickyNoteContentControl.cs
- VisualBrush.cs
- StringStorage.cs
- SupportsEventValidationAttribute.cs
- MonthChangedEventArgs.cs
- XmlSchemaException.cs