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
- SizeAnimationClockResource.cs
- InkPresenter.cs
- TransportationConfigurationTypeInstallComponent.cs
- XmlSchemaSubstitutionGroup.cs
- ProviderConnectionPointCollection.cs
- TableLayoutPanelCellPosition.cs
- HttpResponseInternalWrapper.cs
- ValidationResult.cs
- ValueOfAction.cs
- InternalEnumValidator.cs
- TextTreeTextElementNode.cs
- TopClause.cs
- ConsoleEntryPoint.cs
- FixedSOMGroup.cs
- ReferencedType.cs
- CreateUserWizard.cs
- StringFreezingAttribute.cs
- ResponseStream.cs
- BitmapPalette.cs
- AssemblyInfo.cs
- XmlSchemaGroup.cs
- TextRangeEditTables.cs
- WebPartConnectionsCancelEventArgs.cs
- TypeDescriptor.cs
- SignatureResourcePool.cs
- Trigger.cs
- PeerReferralPolicy.cs
- DiagnosticSection.cs
- userdatakeys.cs
- HMACSHA256.cs
- TraceHwndHost.cs
- CustomSignedXml.cs
- DefaultValueTypeConverter.cs
- ConfigXmlWhitespace.cs
- OleCmdHelper.cs
- TransactionManager.cs
- ModifierKeysConverter.cs
- SessionStateSection.cs
- ComplexTypeEmitter.cs
- FormCollection.cs
- ClickablePoint.cs
- HttpConfigurationSystem.cs
- Util.cs
- LinqDataSourceUpdateEventArgs.cs
- Accessible.cs
- StackSpiller.cs
- XmlNodeChangedEventArgs.cs
- MdImport.cs
- PathGeometry.cs
- UniqueID.cs
- DateTimeConverter2.cs
- TempFiles.cs
- MemberProjectedSlot.cs
- Single.cs
- ContainerActivationHelper.cs
- DescendantOverDescendantQuery.cs
- SafePipeHandle.cs
- DebugInfoGenerator.cs
- Rectangle.cs
- ManualResetEvent.cs
- CodeMethodReturnStatement.cs
- XPathNode.cs
- CacheChildrenQuery.cs
- SoapParser.cs
- GlobalItem.cs
- EntityClientCacheKey.cs
- ConcurrentQueue.cs
- DataGridViewCellStateChangedEventArgs.cs
- PropertyTabChangedEvent.cs
- StagingAreaInputItem.cs
- MatrixValueSerializer.cs
- OverflowException.cs
- ReliableChannelFactory.cs
- ImageDesigner.cs
- VisualBrush.cs
- FormViewDeleteEventArgs.cs
- HtmlButton.cs
- CancelEventArgs.cs
- ParseHttpDate.cs
- RequestCacheManager.cs
- ReferenceConverter.cs
- DbInsertCommandTree.cs
- AccessDataSource.cs
- TransformFinalBlockRequest.cs
- BroadcastEventHelper.cs
- FileDialogCustomPlacesCollection.cs
- LabelAutomationPeer.cs
- ChangeConflicts.cs
- cookiecontainer.cs
- WindowsContainer.cs
- MetadataUtilsSmi.cs
- EncodingDataItem.cs
- FindCriteria11.cs
- ConditionCollection.cs
- HostedBindingBehavior.cs
- ObjectReaderCompiler.cs
- ImageListDesigner.cs
- ColumnHeaderConverter.cs
- InternalConfigHost.cs
- WebPartUtil.cs