Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Documents / DPTypeDescriptorContext.cs / 1305600 / 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
- DataServiceEntityAttribute.cs
- MetafileHeader.cs
- InteropBitmapSource.cs
- NotConverter.cs
- ReadOnlyDataSource.cs
- TemplateKeyConverter.cs
- XslNumber.cs
- MarkupProperty.cs
- PointAnimationUsingKeyFrames.cs
- Bitmap.cs
- TrustManager.cs
- XPathExpr.cs
- SizeF.cs
- ObjectQueryProvider.cs
- TypeToken.cs
- TypeElement.cs
- ConfigurationManager.cs
- CmsInterop.cs
- ISSmlParser.cs
- Part.cs
- DataGridViewElement.cs
- DependencyPropertyKey.cs
- FastEncoder.cs
- TextSelectionHelper.cs
- XmlAttributeAttribute.cs
- ListViewUpdateEventArgs.cs
- RadioButtonAutomationPeer.cs
- ExpressionBuilderCollection.cs
- XPathSelectionIterator.cs
- WebPartZoneBase.cs
- TimelineGroup.cs
- ApplicationId.cs
- Int32CollectionValueSerializer.cs
- ClientTarget.cs
- BinaryMessageEncoder.cs
- DataGridViewCellStyleChangedEventArgs.cs
- HandleCollector.cs
- EdmScalarPropertyAttribute.cs
- ExpressionPrinter.cs
- SystemIPInterfaceStatistics.cs
- AssertFilter.cs
- DragDropManager.cs
- OpCodes.cs
- IsolatedStorageSecurityState.cs
- FormatSettings.cs
- PointAnimationClockResource.cs
- DataTablePropertyDescriptor.cs
- PlatformNotSupportedException.cs
- CompilerParameters.cs
- DoubleLink.cs
- KeyboardNavigation.cs
- AppDomainProtocolHandler.cs
- DurableInstanceProvider.cs
- HttpApplication.cs
- PointIndependentAnimationStorage.cs
- ToolboxItemFilterAttribute.cs
- ComponentConverter.cs
- SqlProviderManifest.cs
- DataGridViewCheckBoxColumn.cs
- PingOptions.cs
- LayoutEngine.cs
- CollectionBuilder.cs
- Geometry.cs
- OperatingSystem.cs
- DocumentsTrace.cs
- XmlnsCache.cs
- ScaleTransform.cs
- LOSFormatter.cs
- DataTableNewRowEvent.cs
- oledbmetadatacolumnnames.cs
- OptimalTextSource.cs
- XmlAttributes.cs
- SimpleExpression.cs
- Not.cs
- TraceListener.cs
- ItemsControl.cs
- TdsParser.cs
- ObjectStateManagerMetadata.cs
- FixedPageStructure.cs
- Component.cs
- BackStopAuthenticationModule.cs
- XamlPathDataSerializer.cs
- InstanceHandleConflictException.cs
- Int32KeyFrameCollection.cs
- SafeNativeMethodsMilCoreApi.cs
- NotCondition.cs
- XmlTextWriter.cs
- ReservationNotFoundException.cs
- SQLGuidStorage.cs
- ProgressBar.cs
- FactoryMaker.cs
- ListViewCancelEventArgs.cs
- QueryContinueDragEventArgs.cs
- Triplet.cs
- FontStyle.cs
- NumberFormatInfo.cs
- MappingSource.cs
- FixedSOMTableCell.cs
- ManualResetEvent.cs
- DataGridViewRowsAddedEventArgs.cs