Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Documents / DPTypeDescriptorContext.cs / 1 / DPTypeDescriptorContext.cs
//---------------------------------------------------------------------------- // // File: TextRangeSerialization.cs // // Copyright (C) Microsoft Corporation. All rights reserved. // // Description: Set of static methods implementing text range serialization // //--------------------------------------------------------------------------- namespace System.Windows.Documents { using MS.Internal; using System.Windows; using System.Globalization; using System.Windows.Media; ////// An object implementing ITypeDescriptorContext intended to be used in serialization /// scenarios for checking whether a particular value can be converted to a string /// internal class DPTypeDescriptorContext : System.ComponentModel.ITypeDescriptorContext { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors private DPTypeDescriptorContext(DependencyProperty property, object propertyValue) { Invariant.Assert(property != null, "property == null"); Invariant.Assert(propertyValue != null, "propertyValue == null"); Invariant.Assert(property.IsValidValue(propertyValue), "propertyValue must be of suitable type for the given dependency property"); _property = property; _propertyValue = propertyValue; } #endregion Constructors //------------------------------------------------------ // // Internal Methods // //----------------------------------------------------- #region Internal Methods // Returns non-null string if this value can be converted to a string, // null otherwise. internal static string GetStringValue(DependencyProperty property, object propertyValue) { string stringValue = null; // Special cases working around incorrectly implemented type converters if (property == UIElement.BitmapEffectProperty) { return null; // Always treat BitmapEffects as complex value } if (property == Inline.TextDecorationsProperty) { stringValue = TextDecorationsFixup((TextDecorationCollection)propertyValue); } else if (typeof(CultureInfo).IsAssignableFrom(property.PropertyType)) //NumberSubstitution.CultureOverrideProperty { stringValue = CultureInfoFixup(property, (CultureInfo)propertyValue); } if (stringValue == null) { DPTypeDescriptorContext context = new DPTypeDescriptorContext(property, propertyValue); System.ComponentModel.TypeConverter typeConverter = System.ComponentModel.TypeDescriptor.GetConverter(property.PropertyType); Invariant.Assert(typeConverter != null); if (typeConverter.CanConvertTo(context, typeof(string))) { stringValue = (string)typeConverter.ConvertTo( context, System.Globalization.CultureInfo.InvariantCulture, propertyValue, typeof(string)); } } return stringValue; } #endregion Internal Methods #region Private Methods private static string TextDecorationsFixup(TextDecorationCollection textDecorations) { string stringValue = null; // Work around for incorrect serialization for TextDecorations property // // Special case for TextDecorations serialization if (TextDecorations.Underline.ValueEquals(textDecorations)) { stringValue = "Underline"; } else if (TextDecorations.Strikethrough.ValueEquals(textDecorations)) { stringValue = "Strikethrough"; } else if (TextDecorations.OverLine.ValueEquals(textDecorations)) { stringValue = "OverLine"; } else if (TextDecorations.Baseline.ValueEquals(textDecorations)) { stringValue = "Baseline"; } else if (textDecorations.Count == 0) { stringValue = string.Empty; } return stringValue; } private static string CultureInfoFixup(DependencyProperty property, CultureInfo cultureInfo) { string stringValue = null; // Parser uses a specific type coverter for converting instances of other types to and from CultureInfo. // This class differs from System.ComponentModel.CultureInfoConverter, the default type converter // for the CultureInfo class. // It uses a string representation based on the IetfLanguageTag property rather than the Name property // (i.e., RFC 3066 rather than RFC 1766). // In order to guarantee roundtripability of serialized xaml, textrange serialization needs to use // this type coverter for CultureInfo types. DPTypeDescriptorContext context = new DPTypeDescriptorContext(property, cultureInfo); System.ComponentModel.TypeConverter typeConverter = new CultureInfoIetfLanguageTagConverter(); if (typeConverter.CanConvertTo(context, typeof(string))) { stringValue = (string)typeConverter.ConvertTo( context, System.Globalization.CultureInfo.InvariantCulture, cultureInfo, typeof(string)); } return stringValue; } #endregion Private Methods //------------------------------------------------------ // // Interface ITypeDescriptorContext // //------------------------------------------------------ #region ITypeDescriptorContext Members System.ComponentModel.IContainer System.ComponentModel.ITypeDescriptorContext.Container { get { return null; } } // Returns a value of a property - to be detected for convertability to string in a type converter object System.ComponentModel.ITypeDescriptorContext.Instance { get { return _propertyValue; } } void System.ComponentModel.ITypeDescriptorContext.OnComponentChanged() { } bool System.ComponentModel.ITypeDescriptorContext.OnComponentChanging() { return false; } System.ComponentModel.PropertyDescriptor System.ComponentModel.ITypeDescriptorContext.PropertyDescriptor { get { return null; } } #endregion #region IServiceProvider Members object IServiceProvider.GetService(Type serviceType) { return null; } #endregion #region Private Fields private DependencyProperty _property; private object _propertyValue; #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // File: TextRangeSerialization.cs // // Copyright (C) Microsoft Corporation. All rights reserved. // // Description: Set of static methods implementing text range serialization // //--------------------------------------------------------------------------- namespace System.Windows.Documents { using MS.Internal; using System.Windows; using System.Globalization; using System.Windows.Media; ////// An object implementing ITypeDescriptorContext intended to be used in serialization /// scenarios for checking whether a particular value can be converted to a string /// internal class DPTypeDescriptorContext : System.ComponentModel.ITypeDescriptorContext { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors private DPTypeDescriptorContext(DependencyProperty property, object propertyValue) { Invariant.Assert(property != null, "property == null"); Invariant.Assert(propertyValue != null, "propertyValue == null"); Invariant.Assert(property.IsValidValue(propertyValue), "propertyValue must be of suitable type for the given dependency property"); _property = property; _propertyValue = propertyValue; } #endregion Constructors //------------------------------------------------------ // // Internal Methods // //----------------------------------------------------- #region Internal Methods // Returns non-null string if this value can be converted to a string, // null otherwise. internal static string GetStringValue(DependencyProperty property, object propertyValue) { string stringValue = null; // Special cases working around incorrectly implemented type converters if (property == UIElement.BitmapEffectProperty) { return null; // Always treat BitmapEffects as complex value } if (property == Inline.TextDecorationsProperty) { stringValue = TextDecorationsFixup((TextDecorationCollection)propertyValue); } else if (typeof(CultureInfo).IsAssignableFrom(property.PropertyType)) //NumberSubstitution.CultureOverrideProperty { stringValue = CultureInfoFixup(property, (CultureInfo)propertyValue); } if (stringValue == null) { DPTypeDescriptorContext context = new DPTypeDescriptorContext(property, propertyValue); System.ComponentModel.TypeConverter typeConverter = System.ComponentModel.TypeDescriptor.GetConverter(property.PropertyType); Invariant.Assert(typeConverter != null); if (typeConverter.CanConvertTo(context, typeof(string))) { stringValue = (string)typeConverter.ConvertTo( context, System.Globalization.CultureInfo.InvariantCulture, propertyValue, typeof(string)); } } return stringValue; } #endregion Internal Methods #region Private Methods private static string TextDecorationsFixup(TextDecorationCollection textDecorations) { string stringValue = null; // Work around for incorrect serialization for TextDecorations property // // Special case for TextDecorations serialization if (TextDecorations.Underline.ValueEquals(textDecorations)) { stringValue = "Underline"; } else if (TextDecorations.Strikethrough.ValueEquals(textDecorations)) { stringValue = "Strikethrough"; } else if (TextDecorations.OverLine.ValueEquals(textDecorations)) { stringValue = "OverLine"; } else if (TextDecorations.Baseline.ValueEquals(textDecorations)) { stringValue = "Baseline"; } else if (textDecorations.Count == 0) { stringValue = string.Empty; } return stringValue; } private static string CultureInfoFixup(DependencyProperty property, CultureInfo cultureInfo) { string stringValue = null; // Parser uses a specific type coverter for converting instances of other types to and from CultureInfo. // This class differs from System.ComponentModel.CultureInfoConverter, the default type converter // for the CultureInfo class. // It uses a string representation based on the IetfLanguageTag property rather than the Name property // (i.e., RFC 3066 rather than RFC 1766). // In order to guarantee roundtripability of serialized xaml, textrange serialization needs to use // this type coverter for CultureInfo types. DPTypeDescriptorContext context = new DPTypeDescriptorContext(property, cultureInfo); System.ComponentModel.TypeConverter typeConverter = new CultureInfoIetfLanguageTagConverter(); if (typeConverter.CanConvertTo(context, typeof(string))) { stringValue = (string)typeConverter.ConvertTo( context, System.Globalization.CultureInfo.InvariantCulture, cultureInfo, typeof(string)); } return stringValue; } #endregion Private Methods //------------------------------------------------------ // // Interface ITypeDescriptorContext // //------------------------------------------------------ #region ITypeDescriptorContext Members System.ComponentModel.IContainer System.ComponentModel.ITypeDescriptorContext.Container { get { return null; } } // Returns a value of a property - to be detected for convertability to string in a type converter object System.ComponentModel.ITypeDescriptorContext.Instance { get { return _propertyValue; } } void System.ComponentModel.ITypeDescriptorContext.OnComponentChanged() { } bool System.ComponentModel.ITypeDescriptorContext.OnComponentChanging() { return false; } System.ComponentModel.PropertyDescriptor System.ComponentModel.ITypeDescriptorContext.PropertyDescriptor { get { return null; } } #endregion #region IServiceProvider Members object IServiceProvider.GetService(Type serviceType) { return null; } #endregion #region Private Fields private DependencyProperty _property; private object _propertyValue; #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
- StylusPointProperties.cs
- OleDbFactory.cs
- BitmapDecoder.cs
- NavigatingCancelEventArgs.cs
- CommonObjectSecurity.cs
- NullableConverter.cs
- EntityTypeEmitter.cs
- WsdlWriter.cs
- X509Extension.cs
- HasCopySemanticsAttribute.cs
- GiveFeedbackEvent.cs
- GuidelineCollection.cs
- columnmapfactory.cs
- X509KeyIdentifierClauseType.cs
- ObjectDataSourceDisposingEventArgs.cs
- KeyInterop.cs
- UserPreferenceChangingEventArgs.cs
- XmlSchemaIdentityConstraint.cs
- ForeignKeyConstraint.cs
- ReferencedCollectionType.cs
- InputManager.cs
- MethodAccessException.cs
- ComplexBindingPropertiesAttribute.cs
- TextContainerChangedEventArgs.cs
- PassportAuthentication.cs
- IriParsingElement.cs
- QueueAccessMode.cs
- DataGridAutoGeneratingColumnEventArgs.cs
- TemplateColumn.cs
- ListItemCollection.cs
- DeferrableContentConverter.cs
- SqlTypeSystemProvider.cs
- HtmlShim.cs
- GridViewSortEventArgs.cs
- SimpleLine.cs
- TreeViewAutomationPeer.cs
- HeaderUtility.cs
- ClientData.cs
- RowVisual.cs
- DataSourceGroupCollection.cs
- MailWriter.cs
- DataGridViewColumnCollection.cs
- ObjectHandle.cs
- RoleGroup.cs
- OpenTypeCommon.cs
- IncrementalReadDecoders.cs
- PasswordTextNavigator.cs
- BitmapEffectGeneralTransform.cs
- RightsManagementPermission.cs
- SHA1.cs
- ImageCreator.cs
- AnnotationAdorner.cs
- RpcCryptoRequest.cs
- HttpGetServerProtocol.cs
- FrameAutomationPeer.cs
- ScaleTransform.cs
- NumericUpDown.cs
- DataGridViewTextBoxColumn.cs
- AsmxEndpointPickerExtension.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- ByteAnimationBase.cs
- EntityDataSource.cs
- _AuthenticationState.cs
- EmbeddedMailObject.cs
- AutomationPropertyInfo.cs
- TransportConfigurationTypeElement.cs
- ToolStripScrollButton.cs
- PrintDialog.cs
- RowParagraph.cs
- DataViewListener.cs
- VisualTransition.cs
- EarlyBoundInfo.cs
- XPathNode.cs
- UnmanagedBitmapWrapper.cs
- followingquery.cs
- XamlFrame.cs
- ZoneIdentityPermission.cs
- DecoderFallback.cs
- ObjectStateEntry.cs
- CorrelationInitializer.cs
- validation.cs
- DetectRunnableInstancesTask.cs
- HybridCollection.cs
- RemotingConfigParser.cs
- ListViewItem.cs
- XmlBinaryReaderSession.cs
- TypeInfo.cs
- DatePickerDateValidationErrorEventArgs.cs
- GridSplitter.cs
- XmlObjectSerializerWriteContext.cs
- StorageMappingItemCollection.cs
- IItemProperties.cs
- XmlSchemaSimpleTypeRestriction.cs
- SqlClientWrapperSmiStream.cs
- DataGridTableCollection.cs
- TextPattern.cs
- BitmapEncoder.cs
- CodeTypeParameterCollection.cs
- OdbcConnectionPoolProviderInfo.cs
- OutputCacheProfileCollection.cs