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
- RecipientInfo.cs
- HtmlAnchor.cs
- XmlIterators.cs
- WindowsSecurityTokenAuthenticator.cs
- ObjectDataSourceSelectingEventArgs.cs
- ELinqQueryState.cs
- PropertyGridEditorPart.cs
- ModifierKeysConverter.cs
- DescendantQuery.cs
- EnterpriseServicesHelper.cs
- LineInfo.cs
- LinearQuaternionKeyFrame.cs
- CompiledRegexRunnerFactory.cs
- DodSequenceMerge.cs
- SamlSerializer.cs
- ConnectionPoint.cs
- CodeNamespaceCollection.cs
- Rectangle.cs
- ScriptServiceAttribute.cs
- OptimizerPatterns.cs
- EdmConstants.cs
- DataPointer.cs
- ComponentEditorPage.cs
- ExpandButtonVisibilityConverter.cs
- MapPathBasedVirtualPathProvider.cs
- userdatakeys.cs
- StylusButton.cs
- CapabilitiesRule.cs
- SQLMoney.cs
- StringAnimationUsingKeyFrames.cs
- TimeSpanValidatorAttribute.cs
- figurelength.cs
- XXXInfos.cs
- SafeCryptoHandles.cs
- PropertyGroupDescription.cs
- OuterGlowBitmapEffect.cs
- BoolExpressionVisitors.cs
- HTMLTagNameToTypeMapper.cs
- ToolStripSplitButton.cs
- TypographyProperties.cs
- KnownTypeDataContractResolver.cs
- RayHitTestParameters.cs
- AsymmetricSecurityBindingElement.cs
- AttributeData.cs
- ContextMenuStripGroup.cs
- SoapSchemaMember.cs
- TypefaceMetricsCache.cs
- ActivityExecutionFilter.cs
- Journal.cs
- XmlWellformedWriter.cs
- XmlBindingWorker.cs
- ElementNotEnabledException.cs
- SaveFileDialog.cs
- OdbcParameterCollection.cs
- ConvertersCollection.cs
- Vector3D.cs
- ResXFileRef.cs
- EpmContentDeSerializer.cs
- ReliableDuplexSessionChannel.cs
- MsmqHostedTransportConfiguration.cs
- CursorInteropHelper.cs
- SizeAnimationBase.cs
- IdentifierService.cs
- BlurEffect.cs
- XmlIlGenerator.cs
- EventSinkHelperWriter.cs
- GeneralTransform2DTo3DTo2D.cs
- PassportPrincipal.cs
- ProcessHostServerConfig.cs
- XmlNullResolver.cs
- RSACryptoServiceProvider.cs
- CallContext.cs
- CardSpacePolicyElement.cs
- ModelPerspective.cs
- BooleanProjectedSlot.cs
- BindingWorker.cs
- CodeGenerator.cs
- StylusTip.cs
- AttributeCollection.cs
- ConfigurationLocationCollection.cs
- StandardCommands.cs
- DirectionalLight.cs
- TypeForwardedToAttribute.cs
- PackageDigitalSignatureManager.cs
- IMembershipProvider.cs
- ValueTypeFixupInfo.cs
- SafeCryptContextHandle.cs
- TextBox.cs
- EventLogPermission.cs
- CacheAxisQuery.cs
- RectangleGeometry.cs
- SafeReadContext.cs
- MatcherBuilder.cs
- StringArrayConverter.cs
- SecurityBindingElementImporter.cs
- SiteMapPath.cs
- odbcmetadatacolumnnames.cs
- ByteKeyFrameCollection.cs
- UdpConstants.cs
- DrawingCollection.cs