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 /// internal Uri BaseUri; ///Can be null ////// 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 /// internal Uri BaseUri; ///Can be null ////// 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
- HashMembershipCondition.cs
- MediaPlayerState.cs
- relpropertyhelper.cs
- KnownTypeAttribute.cs
- LayoutInformation.cs
- Rule.cs
- ZoneLinkButton.cs
- ComponentManagerBroker.cs
- PersonalizationAdministration.cs
- NavigationCommands.cs
- DeviceFilterDictionary.cs
- TextDecorationCollectionConverter.cs
- SqlConnectionPoolGroupProviderInfo.cs
- FieldInfo.cs
- XmlSchemaDocumentation.cs
- XmlQueryCardinality.cs
- TextBoxBase.cs
- ActivityExecutorOperation.cs
- PictureBox.cs
- WriteFileContext.cs
- TextFragmentEngine.cs
- DbDataReader.cs
- InvariantComparer.cs
- ComplexBindingPropertiesAttribute.cs
- PrivilegeNotHeldException.cs
- DbDataRecord.cs
- SubpageParagraph.cs
- CollectionViewGroupInternal.cs
- Style.cs
- MailMessage.cs
- TargetControlTypeAttribute.cs
- DesignerDataConnection.cs
- PublisherMembershipCondition.cs
- Properties.cs
- NoPersistScope.cs
- EventLogException.cs
- ListCollectionView.cs
- DeadCharTextComposition.cs
- UtilityExtension.cs
- SystemDropShadowChrome.cs
- ArrayTypeMismatchException.cs
- ObjectViewEntityCollectionData.cs
- ColorInterpolationModeValidation.cs
- HashStream.cs
- BufferedWebEventProvider.cs
- XmlImplementation.cs
- MethodRental.cs
- SmtpSection.cs
- CellRelation.cs
- GenerateHelper.cs
- HtmlTableRow.cs
- VSWCFServiceContractGenerator.cs
- CustomErrorCollection.cs
- SmtpNegotiateAuthenticationModule.cs
- Fault.cs
- IMembershipProvider.cs
- FontCollection.cs
- VersionPair.cs
- WeakRefEnumerator.cs
- ConvertEvent.cs
- FileSystemWatcher.cs
- DbDataSourceEnumerator.cs
- CompilerState.cs
- BamlRecordWriter.cs
- SqlNodeAnnotation.cs
- BrowserCapabilitiesFactory35.cs
- EventProviderBase.cs
- AssemblyBuilder.cs
- MenuItemStyleCollection.cs
- SafeRightsManagementHandle.cs
- SubpageParagraph.cs
- DisplayInformation.cs
- ListenerAdaptersInstallComponent.cs
- BinHexEncoder.cs
- HttpFileCollectionWrapper.cs
- CultureInfoConverter.cs
- FragmentQueryProcessor.cs
- EntityDataSourceChangingEventArgs.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- ActivationServices.cs
- PageWrapper.cs
- XmlNamedNodeMap.cs
- RectangleGeometry.cs
- SessionConnectionReader.cs
- EdmToObjectNamespaceMap.cs
- SafeSecurityHandles.cs
- CookieParameter.cs
- EntityPropertyMappingAttribute.cs
- DataGridViewColumnDesigner.cs
- SamlAction.cs
- AuditLogLocation.cs
- ListParagraph.cs
- BridgeDataReader.cs
- TextBoxBaseDesigner.cs
- RegistryKey.cs
- AsymmetricKeyExchangeDeformatter.cs
- SafeWaitHandle.cs
- DataGridTextBox.cs
- DocumentViewer.cs
- PeerToPeerException.cs