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
- MILUtilities.cs
- HttpRawResponse.cs
- BlockExpression.cs
- GiveFeedbackEventArgs.cs
- HideDisabledControlAdapter.cs
- AuthenticationService.cs
- TypeDependencyAttribute.cs
- AttachmentService.cs
- Semaphore.cs
- MethodAccessException.cs
- AtomEntry.cs
- RepeatBehavior.cs
- FileDetails.cs
- ImageListImageEditor.cs
- X509CertificateCollection.cs
- InternalResources.cs
- NameNode.cs
- WebServiceParameterData.cs
- PtsHelper.cs
- ColorConvertedBitmapExtension.cs
- SequenceRange.cs
- DataGridViewRowsRemovedEventArgs.cs
- MenuRendererClassic.cs
- COM2Properties.cs
- EventRecordWrittenEventArgs.cs
- documentsequencetextpointer.cs
- MembershipPasswordException.cs
- ControlType.cs
- RadialGradientBrush.cs
- OdbcDataReader.cs
- EncodingNLS.cs
- HotCommands.cs
- TransformPatternIdentifiers.cs
- QilLiteral.cs
- XmlNamespaceDeclarationsAttribute.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- MenuItemCollection.cs
- ToolStripItemDesigner.cs
- CompositeActivityDesigner.cs
- HandleExceptionArgs.cs
- TextReader.cs
- HtmlEmptyTagControlBuilder.cs
- Geometry.cs
- PerfCounters.cs
- DashStyles.cs
- EncodingInfo.cs
- ObjectDataSourceStatusEventArgs.cs
- BuildResultCache.cs
- PropertyItem.cs
- SqlDataSourceCache.cs
- ServerIdentity.cs
- FileVersion.cs
- DataTableClearEvent.cs
- ResourceKey.cs
- ScrollViewerAutomationPeer.cs
- MatrixTransform.cs
- RequiredFieldValidator.cs
- AxisAngleRotation3D.cs
- HttpContextServiceHost.cs
- CodeCatchClause.cs
- MarkupWriter.cs
- SqlCacheDependencyDatabaseCollection.cs
- TextSerializer.cs
- CodeThrowExceptionStatement.cs
- Transform3DGroup.cs
- AxisAngleRotation3D.cs
- ToolStripPanelRenderEventArgs.cs
- CellRelation.cs
- SqlBooleanizer.cs
- CustomErrorsSection.cs
- WindowsListViewItemCheckBox.cs
- _LazyAsyncResult.cs
- DesignDataSource.cs
- ParamArrayAttribute.cs
- PartialToken.cs
- QueryMatcher.cs
- ContentType.cs
- BrushValueSerializer.cs
- GridSplitter.cs
- ElementHost.cs
- XamlSerializer.cs
- COM2ExtendedUITypeEditor.cs
- Thickness.cs
- ToolStripRenderer.cs
- CompilerResults.cs
- UnknownWrapper.cs
- TargetInvocationException.cs
- ToolStripStatusLabel.cs
- TagPrefixInfo.cs
- SqlInternalConnectionTds.cs
- DataKeyArray.cs
- DataGridViewRowPostPaintEventArgs.cs
- RoleManagerModule.cs
- CmsInterop.cs
- WebReferencesBuildProvider.cs
- DbConnectionPool.cs
- DataRecordInternal.cs
- SQLDouble.cs
- RMPermissions.cs
- CharEnumerator.cs