Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Shared / System / Windows / Media / TypeConverterHelper.cs / 1 / TypeConverterHelper.cs
//------------------------------------------------------------------------------
// Microsoft Avalon
// Copyright (c) Microsoft Corporation, All rights reserved.
//
// File: TypeConverterHelper.cs
//
//-----------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Windows.Markup;
using System.Runtime.InteropServices;
using System.Windows.Navigation;
namespace System.Windows.Media
{
#region UriHolder
///
/// UriHolder
/// Holds Original and Base Uris
///
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct UriHolder
{
///
/// BaseUri
/// Can be null
///
internal Uri BaseUri;
///
/// OriginalUri
///
internal Uri OriginalUri;
};
#endregion
#region TypeConverterHelper
///
/// This helper method is used primarily by type converters to resolve their uri
///
///
/// There are three scenarios that can happen:
///
/// 1) inputString is an absolute uri -- we return it as the resolvedUri
/// 2) inputString is not absolute:
/// i) the relativeBaseUri (obtained from IUriContext) has the following values:
/// a) is an absolute uri, we use relativeBaseUri as base uri and resolve
/// the inputString against it
///
/// b) is a relative uri, we use Application's base uri (obtained from
/// BindUriHelperCore.BaseUri) as the base and resolve the relativeBaseUri
/// against it; furthermore, we resolve the inputString against with uri
/// obtained from the application base resolution.
///
/// c) is "", we resolve inputString against the Application's base uri
///
internal static class TypeConverterHelper
{
internal static UriHolder GetUriFromUriContext(ITypeDescriptorContext context, object inputString)
{
UriHolder uriHolder = new UriHolder();
if (inputString is string)
{
uriHolder.OriginalUri = new Uri((string)inputString, UriKind.RelativeOrAbsolute);
}
else
{
Debug.Assert(inputString is Uri);
uriHolder.OriginalUri = (Uri)inputString;
}
if (uriHolder.OriginalUri.IsAbsoluteUri == false)
{
//Debug.Assert (context != null, "Context should not be null");
if (context != null)
{
IUriContext iuc = (IUriContext)context.GetService(typeof(IUriContext));
//Debug.Assert (iuc != null, "IUriContext should not be null here");
if (iuc != null)
{
// the base uri is NOT ""
if (iuc.BaseUri != null)
{
uriHolder.BaseUri = iuc.BaseUri;
if (!uriHolder.BaseUri.IsAbsoluteUri)
{
uriHolder.BaseUri = new Uri(BaseUriHelper.BaseUri, uriHolder.BaseUri);
}
} // uriHolder.BaseUriString != ""
else
{
// if we reach here, the base uri we got from IUriContext is ""
// and the inputString is a relative uri. Here we resolve it to
// application's base
uriHolder.BaseUri = BaseUriHelper.BaseUri;
}
} // iuc != null
} // context!= null
} // uriHolder.OriginalUri.IsAbsoluteUri == false
return uriHolder;
}
}
#endregion
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
// Microsoft Avalon
// Copyright (c) Microsoft Corporation, All rights reserved.
//
// File: TypeConverterHelper.cs
//
//-----------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Windows.Markup;
using System.Runtime.InteropServices;
using System.Windows.Navigation;
namespace System.Windows.Media
{
#region UriHolder
///
/// UriHolder
/// Holds Original and Base Uris
///
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct UriHolder
{
///
/// BaseUri
/// Can be null
///
internal Uri BaseUri;
///
/// OriginalUri
///
internal Uri OriginalUri;
};
#endregion
#region TypeConverterHelper
///
/// This helper method is used primarily by type converters to resolve their uri
///
///
/// There are three scenarios that can happen:
///
/// 1) inputString is an absolute uri -- we return it as the resolvedUri
/// 2) inputString is not absolute:
/// i) the relativeBaseUri (obtained from IUriContext) has the following values:
/// a) is an absolute uri, we use relativeBaseUri as base uri and resolve
/// the inputString against it
///
/// b) is a relative uri, we use Application's base uri (obtained from
/// BindUriHelperCore.BaseUri) as the base and resolve the relativeBaseUri
/// against it; furthermore, we resolve the inputString against with uri
/// obtained from the application base resolution.
///
/// c) is "", we resolve inputString against the Application's base uri
///
internal static class TypeConverterHelper
{
internal static UriHolder GetUriFromUriContext(ITypeDescriptorContext context, object inputString)
{
UriHolder uriHolder = new UriHolder();
if (inputString is string)
{
uriHolder.OriginalUri = new Uri((string)inputString, UriKind.RelativeOrAbsolute);
}
else
{
Debug.Assert(inputString is Uri);
uriHolder.OriginalUri = (Uri)inputString;
}
if (uriHolder.OriginalUri.IsAbsoluteUri == false)
{
//Debug.Assert (context != null, "Context should not be null");
if (context != null)
{
IUriContext iuc = (IUriContext)context.GetService(typeof(IUriContext));
//Debug.Assert (iuc != null, "IUriContext should not be null here");
if (iuc != null)
{
// the base uri is NOT ""
if (iuc.BaseUri != null)
{
uriHolder.BaseUri = iuc.BaseUri;
if (!uriHolder.BaseUri.IsAbsoluteUri)
{
uriHolder.BaseUri = new Uri(BaseUriHelper.BaseUri, uriHolder.BaseUri);
}
} // uriHolder.BaseUriString != ""
else
{
// if we reach here, the base uri we got from IUriContext is ""
// and the inputString is a relative uri. Here we resolve it to
// application's base
uriHolder.BaseUri = BaseUriHelper.BaseUri;
}
} // iuc != null
} // context!= null
} // uriHolder.OriginalUri.IsAbsoluteUri == false
return uriHolder;
}
}
#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
- Vector.cs
- MatrixTransform.cs
- ResourceAssociationSet.cs
- DataObjectMethodAttribute.cs
- SafeRightsManagementHandle.cs
- ServiceMetadataBehavior.cs
- NamespaceInfo.cs
- WindowsFormsHost.cs
- TextStore.cs
- FlowDocumentPaginator.cs
- XmlWrappingWriter.cs
- Perspective.cs
- DesignerActionVerbItem.cs
- DbMetaDataColumnNames.cs
- DetailsViewUpdateEventArgs.cs
- CommonRemoteMemoryBlock.cs
- ForeignConstraint.cs
- XmlSchemaSimpleType.cs
- UpdateManifestForBrowserApplication.cs
- NumberFunctions.cs
- SchemaNames.cs
- Interlocked.cs
- DataGridItemEventArgs.cs
- RecommendedAsConfigurableAttribute.cs
- StylusDownEventArgs.cs
- Rect3DValueSerializer.cs
- XmlChildEnumerator.cs
- SerializationException.cs
- SupportingTokenSpecification.cs
- HwndTarget.cs
- GrammarBuilder.cs
- CompoundFileDeflateTransform.cs
- ECDiffieHellmanCngPublicKey.cs
- Translator.cs
- PinnedBufferMemoryStream.cs
- XmlFormatWriterGenerator.cs
- QilGenerator.cs
- OdbcConnectionFactory.cs
- TcpStreams.cs
- ListViewItemEventArgs.cs
- CheckBoxBaseAdapter.cs
- WebPartZoneAutoFormat.cs
- PrimitiveCodeDomSerializer.cs
- RuleSetBrowserDialog.cs
- ValueTable.cs
- CurrencyWrapper.cs
- ListBase.cs
- ByeOperationAsyncResult.cs
- MonthChangedEventArgs.cs
- TrustManagerMoreInformation.cs
- WorkflowEnvironment.cs
- Vector3DCollection.cs
- CodeExpressionStatement.cs
- ScaleTransform.cs
- StrokeNodeData.cs
- MarkupObject.cs
- ContractMethodInfo.cs
- SectionXmlInfo.cs
- DependencyObjectCodeDomSerializer.cs
- TaskForm.cs
- FilterException.cs
- ExtenderControl.cs
- DataFormat.cs
- BufferBuilder.cs
- XmlUtf8RawTextWriter.cs
- StringFunctions.cs
- Msmq.cs
- Avt.cs
- InputProcessorProfiles.cs
- ClientUrlResolverWrapper.cs
- BamlLocalizableResource.cs
- ActivityDesignerAccessibleObject.cs
- Scene3D.cs
- Matrix.cs
- LinqDataSourceSelectEventArgs.cs
- Graphics.cs
- LineVisual.cs
- XhtmlBasicImageAdapter.cs
- TabPageDesigner.cs
- AutomationPropertyInfo.cs
- SrgsSubset.cs
- BaseAsyncResult.cs
- XmlSchemas.cs
- _SSPIWrapper.cs
- ClientProtocol.cs
- AttributeUsageAttribute.cs
- EventItfInfo.cs
- _CacheStreams.cs
- StaticSiteMapProvider.cs
- OdbcPermission.cs
- X509ServiceCertificateAuthenticationElement.cs
- GridViewDeleteEventArgs.cs
- DynamicRenderer.cs
- LineUtil.cs
- ModuleConfigurationInfo.cs
- FSWPathEditor.cs
- XmlAttributeCache.cs
- BasePropertyDescriptor.cs
- XPathParser.cs
- Vector3DIndependentAnimationStorage.cs