Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ToolStripLabel.cs
- Int16Converter.cs
- DataControlLinkButton.cs
- MemoryFailPoint.cs
- ExceptionUtility.cs
- SystemSounds.cs
- TypeUsage.cs
- CatalogPart.cs
- PropertyReferenceSerializer.cs
- Random.cs
- OdbcError.cs
- DataGridViewComboBoxCell.cs
- SinglePhaseEnlistment.cs
- PtsContext.cs
- Pointer.cs
- FontEmbeddingManager.cs
- shaperfactoryquerycacheentry.cs
- EndpointDiscoveryMetadataCD1.cs
- BitmapEffectGeneralTransform.cs
- SqlBooleanMismatchVisitor.cs
- MessageSmuggler.cs
- FileDialogPermission.cs
- WindowsListViewSubItem.cs
- ArrayHelper.cs
- WindowsListViewItemStartMenu.cs
- CompositeActivityDesigner.cs
- glyphs.cs
- XmlTypeMapping.cs
- MenuScrollingVisibilityConverter.cs
- SynchronizingStream.cs
- PageParserFilter.cs
- ResizeGrip.cs
- SettingsPropertyNotFoundException.cs
- TextViewSelectionProcessor.cs
- EntityDescriptor.cs
- ExitEventArgs.cs
- EntryPointNotFoundException.cs
- LayoutDump.cs
- DocumentSequence.cs
- DependencyPropertyKey.cs
- AutomationPatternInfo.cs
- XmlSchemaCollection.cs
- WebServicesSection.cs
- LookupBindingPropertiesAttribute.cs
- InvalidMessageContractException.cs
- PropertyEntry.cs
- SiteOfOriginContainer.cs
- RegexCompiler.cs
- MimeWriter.cs
- DataTableTypeConverter.cs
- WindowInteropHelper.cs
- DataServiceResponse.cs
- XmlSchemaElement.cs
- EnlistmentTraceIdentifier.cs
- SignalGate.cs
- SQLMembershipProvider.cs
- UdpTransportSettingsElement.cs
- RequestCachingSection.cs
- EdgeModeValidation.cs
- GridViewRowCollection.cs
- DataMisalignedException.cs
- ZoneLinkButton.cs
- StateItem.cs
- DataError.cs
- TreeViewItem.cs
- AspNetHostingPermission.cs
- VisualBasicImportReference.cs
- View.cs
- Int16Animation.cs
- EmbeddedMailObject.cs
- XmlElementCollection.cs
- ExplicitDiscriminatorMap.cs
- DoubleLinkListEnumerator.cs
- IdentityNotMappedException.cs
- ContentHostHelper.cs
- CompilerResults.cs
- GenericIdentity.cs
- GridViewDeleteEventArgs.cs
- PeerTransportListenAddressValidator.cs
- TypeProvider.cs
- UnitySerializationHolder.cs
- StronglyTypedResourceBuilder.cs
- Pointer.cs
- InstanceCreationEditor.cs
- X509IssuerSerialKeyIdentifierClause.cs
- ColorTranslator.cs
- Brush.cs
- SlipBehavior.cs
- TextWriterEngine.cs
- UIPropertyMetadata.cs
- EntityDesignerBuildProvider.cs
- SQLInt32.cs
- XPathMultyIterator.cs
- MessageBox.cs
- WebPartConnectionsCloseVerb.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- PathSegment.cs
- SmtpException.cs
- DiscoveryClientBindingElement.cs
- DataList.cs