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
- MobileControlsSection.cs
- SafeHandles.cs
- Publisher.cs
- TaskScheduler.cs
- SqlDataSourceParameterParser.cs
- SqlFileStream.cs
- ScriptManager.cs
- arc.cs
- ExpressionNode.cs
- Rotation3DKeyFrameCollection.cs
- PolygonHotSpot.cs
- Sql8ConformanceChecker.cs
- KnownTypesHelper.cs
- ReturnEventArgs.cs
- SourceItem.cs
- PropertyDescriptorCollection.cs
- EmissiveMaterial.cs
- SecureConversationDriver.cs
- XmlUnspecifiedAttribute.cs
- Walker.cs
- CookieParameter.cs
- NameValueConfigurationElement.cs
- ApplicationServiceManager.cs
- SqlProviderServices.cs
- UrlMappingsModule.cs
- ClientConfigPaths.cs
- TemplatedAdorner.cs
- ConsoleCancelEventArgs.cs
- DbConnectionPoolCounters.cs
- XsltQilFactory.cs
- ClientUrlResolverWrapper.cs
- SingleBodyParameterMessageFormatter.cs
- SqlMethodAttribute.cs
- IntSecurity.cs
- ProxyAttribute.cs
- NameValuePair.cs
- ListBindableAttribute.cs
- KeyEventArgs.cs
- BulletDecorator.cs
- CollectionViewProxy.cs
- BasicHttpSecurityElement.cs
- QilReference.cs
- QilReference.cs
- SQLDouble.cs
- FlowPosition.cs
- InputBindingCollection.cs
- ActivationServices.cs
- SocketInformation.cs
- DesignSurfaceServiceContainer.cs
- DesignerInterfaces.cs
- FontDriver.cs
- AutomationElementCollection.cs
- WebPartZoneCollection.cs
- ResXResourceWriter.cs
- ProcessThread.cs
- DynamicRendererThreadManager.cs
- ValidatorUtils.cs
- CounterSampleCalculator.cs
- StreamHelper.cs
- CmsInterop.cs
- XsdCachingReader.cs
- FamilyTypeface.cs
- InstanceData.cs
- Int32KeyFrameCollection.cs
- MembershipSection.cs
- GridViewEditEventArgs.cs
- SettingsSavedEventArgs.cs
- DeviceFiltersSection.cs
- BrowserDefinition.cs
- IISMapPath.cs
- LayoutInformation.cs
- OutputCacheProfile.cs
- Transform3D.cs
- SettingsBindableAttribute.cs
- WorkflowHostingResponseContext.cs
- SoundPlayer.cs
- LongMinMaxAggregationOperator.cs
- WindowsUpDown.cs
- SqlBulkCopy.cs
- MeasureData.cs
- ProxyGenerationError.cs
- NavigationEventArgs.cs
- ImportCatalogPart.cs
- TextBoxAutoCompleteSourceConverter.cs
- SiteMapNodeItemEventArgs.cs
- CustomTypeDescriptor.cs
- GraphicsPathIterator.cs
- TextComposition.cs
- EmptyQuery.cs
- MailWebEventProvider.cs
- AspCompat.cs
- OracleParameter.cs
- EntityDataSourceUtil.cs
- VisualBasicDesignerHelper.cs
- RemotingException.cs
- AlternateViewCollection.cs
- Int32RectValueSerializer.cs
- NoResizeSelectionBorderGlyph.cs
- XmlValueConverter.cs
- OuterGlowBitmapEffect.cs