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
- SplitterPanel.cs
- ThumbAutomationPeer.cs
- CodePageUtils.cs
- DLinqColumnProvider.cs
- FormsAuthenticationCredentials.cs
- CollaborationHelperFunctions.cs
- BitConverter.cs
- SchemaNamespaceManager.cs
- DbConvert.cs
- ImageIndexConverter.cs
- GenericEnumConverter.cs
- TransformProviderWrapper.cs
- DataGridViewAdvancedBorderStyle.cs
- WebPartConnectionsCancelEventArgs.cs
- InputManager.cs
- XamlParser.cs
- Menu.cs
- IntSecurity.cs
- X509Certificate.cs
- RootBrowserWindowAutomationPeer.cs
- OperationContractAttribute.cs
- DLinqColumnProvider.cs
- CommonProperties.cs
- ModelFactory.cs
- EventLogPermissionEntryCollection.cs
- ContainerVisual.cs
- contentDescriptor.cs
- HttpServerUtilityBase.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- SqlDependencyListener.cs
- TimeSpanValidatorAttribute.cs
- WebPart.cs
- HtmlString.cs
- HttpDictionary.cs
- SrgsGrammar.cs
- SqlInfoMessageEvent.cs
- TrackingConditionCollection.cs
- MasterPageBuildProvider.cs
- TcpTransportBindingElement.cs
- DBCSCodePageEncoding.cs
- WebPageTraceListener.cs
- sqlcontext.cs
- GeometryHitTestParameters.cs
- ConnectionStringsSection.cs
- ControlBuilderAttribute.cs
- TemplateContentLoader.cs
- DeviceFiltersSection.cs
- MimeParameter.cs
- DriveNotFoundException.cs
- BaseResourcesBuildProvider.cs
- CompoundFileIOPermission.cs
- EpmCustomContentSerializer.cs
- WriteTimeStream.cs
- ElementUtil.cs
- RangeValuePatternIdentifiers.cs
- FontStretches.cs
- CultureInfoConverter.cs
- HostVisual.cs
- XmlDataLoader.cs
- CRYPTPROTECT_PROMPTSTRUCT.cs
- WasNotInstalledException.cs
- CacheSection.cs
- InstalledVoice.cs
- DynamicPropertyHolder.cs
- TextContainerHelper.cs
- IndexExpression.cs
- XPathEmptyIterator.cs
- ToolBar.cs
- AnnouncementEventArgs.cs
- ActivationServices.cs
- LinkedResourceCollection.cs
- DataGridLinkButton.cs
- AutomationElement.cs
- UntypedNullExpression.cs
- XmlDeclaration.cs
- FormParameter.cs
- WebControlToolBoxItem.cs
- SparseMemoryStream.cs
- ColorConverter.cs
- RuleDefinitions.cs
- RemoteArgument.cs
- UnmanagedHandle.cs
- ImplicitInputBrush.cs
- XmlDownloadManager.cs
- SelectionChangedEventArgs.cs
- Style.cs
- SubqueryRules.cs
- SessionStateContainer.cs
- DefaultPrintController.cs
- Timer.cs
- ExpandedWrapper.cs
- NativeMethods.cs
- XmlSchemaDatatype.cs
- ParamArrayAttribute.cs
- ComplusTypeValidator.cs
- AnyAllSearchOperator.cs
- Point3DKeyFrameCollection.cs
- DataPagerFieldCommandEventArgs.cs
- UnsignedPublishLicense.cs
- Ray3DHitTestResult.cs