Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- GridViewRowPresenterBase.cs
- CustomAttribute.cs
- SHA1Cng.cs
- QilUnary.cs
- DbMetaDataCollectionNames.cs
- SimpleApplicationHost.cs
- Activity.cs
- UICuesEvent.cs
- MessageQueuePermission.cs
- SymmetricAlgorithm.cs
- AssociatedControlConverter.cs
- PageFunction.cs
- ObjectDataSourceStatusEventArgs.cs
- WebPartEditorCancelVerb.cs
- ContentDesigner.cs
- _ConnectionGroup.cs
- AssemblyInfo.cs
- SizeChangedInfo.cs
- SystemInfo.cs
- WindowsScrollBar.cs
- Dynamic.cs
- Group.cs
- XPathAxisIterator.cs
- TransactionalPackage.cs
- MenuRendererClassic.cs
- PartitionResolver.cs
- ToolStripDropDownItemDesigner.cs
- FrameAutomationPeer.cs
- ErrorTableItemStyle.cs
- FilterException.cs
- DbParameterHelper.cs
- ChannelSinkStacks.cs
- TreeNodeStyleCollection.cs
- GlobalizationSection.cs
- MenuDesigner.cs
- IntranetCredentialPolicy.cs
- HashAlgorithm.cs
- mda.cs
- CommandEventArgs.cs
- DataObjectAttribute.cs
- StickyNote.cs
- DataSourceProvider.cs
- HitTestParameters3D.cs
- LineMetrics.cs
- GridItemPattern.cs
- MenuItemStyle.cs
- XmlSchemaAnnotation.cs
- SchemaName.cs
- BitConverter.cs
- NameValueCollection.cs
- DocumentPageHost.cs
- ExtendedPropertyCollection.cs
- EmitterCache.cs
- DbgCompiler.cs
- CompiledXpathExpr.cs
- SurrogateSelector.cs
- ConfigurationSectionCollection.cs
- StringValidator.cs
- ResourcePermissionBaseEntry.cs
- ModifierKeysConverter.cs
- MsmqIntegrationOutputChannel.cs
- EastAsianLunisolarCalendar.cs
- XPathArrayIterator.cs
- DrawingContextWalker.cs
- TextFormatterHost.cs
- ToolStripDropDownMenu.cs
- SamlSecurityTokenAuthenticator.cs
- LeaseManager.cs
- WebPartMenu.cs
- Matrix3D.cs
- XmlSchemaProviderAttribute.cs
- FixedDocument.cs
- XamlStyleSerializer.cs
- EntryPointNotFoundException.cs
- IdentityReference.cs
- COM2IPerPropertyBrowsingHandler.cs
- CategoryNameCollection.cs
- Evidence.cs
- XmlSerializableWriter.cs
- PointCollection.cs
- ButtonStandardAdapter.cs
- X509AudioLogo.cs
- sapiproxy.cs
- FlowNode.cs
- XNameConverter.cs
- ManagementBaseObject.cs
- DynamicResourceExtension.cs
- TreeViewDesigner.cs
- FileChangesMonitor.cs
- HtmlWindow.cs
- RegexNode.cs
- _NegoState.cs
- DrawingImage.cs
- DateTimeValueSerializerContext.cs
- ValidatorCollection.cs
- ConfigsHelper.cs
- IntersectQueryOperator.cs
- SystemFonts.cs
- JsonGlobals.cs
- Function.cs