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
- XmlTypeMapping.cs
- ActivityXRefPropertyEditor.cs
- DocumentReference.cs
- CatalogZoneBase.cs
- LinkedDataMemberFieldEditor.cs
- UdpUtility.cs
- Match.cs
- HttpContext.cs
- SmtpNegotiateAuthenticationModule.cs
- SessionStateModule.cs
- Stack.cs
- DragEventArgs.cs
- ControlBindingsCollection.cs
- StrokeDescriptor.cs
- QuaternionRotation3D.cs
- DecoderBestFitFallback.cs
- Point3D.cs
- PresentationAppDomainManager.cs
- TransactedBatchingElement.cs
- UIElement3D.cs
- GeometryModel3D.cs
- Bold.cs
- DataBindingCollection.cs
- AbstractDataSvcMapFileLoader.cs
- UserInitiatedNavigationPermission.cs
- Int16AnimationBase.cs
- _ShellExpression.cs
- TypeConstant.cs
- NameNode.cs
- EventRoute.cs
- TemplateKey.cs
- DataGridViewColumnCollectionDialog.cs
- WorkflowControlClient.cs
- AuthorizationPolicyTypeElementCollection.cs
- baseaxisquery.cs
- ParameterBuilder.cs
- MultiBinding.cs
- AppDomain.cs
- MenuItemAutomationPeer.cs
- AttributeSetAction.cs
- ExpressionParser.cs
- DataKey.cs
- ExecutedRoutedEventArgs.cs
- ThreadInterruptedException.cs
- InvalidComObjectException.cs
- WindowProviderWrapper.cs
- SmiContextFactory.cs
- NavigationPropertyEmitter.cs
- SiteMapProvider.cs
- StandardCommands.cs
- SafeSecurityHelper.cs
- WorkflowOwnershipException.cs
- HttpCapabilitiesBase.cs
- AttachedPropertyBrowsableAttribute.cs
- BamlCollectionHolder.cs
- DataPager.cs
- OneToOneMappingSerializer.cs
- CompModHelpers.cs
- NamespaceEmitter.cs
- VariableQuery.cs
- HotSpotCollection.cs
- IriParsingElement.cs
- GeneralTransformGroup.cs
- ScriptMethodAttribute.cs
- EventDescriptor.cs
- StateWorkerRequest.cs
- DataSysAttribute.cs
- TraceUtils.cs
- SocketPermission.cs
- XmlChildNodes.cs
- RelatedView.cs
- FormViewModeEventArgs.cs
- LocalBuilder.cs
- ColumnMapVisitor.cs
- DbConnectionStringCommon.cs
- LicenseManager.cs
- ClientData.cs
- ColumnBinding.cs
- HtmlInputButton.cs
- EasingKeyFrames.cs
- RemotingService.cs
- TextTreeRootTextBlock.cs
- TaskDesigner.cs
- TableCellCollection.cs
- SqlUdtInfo.cs
- AdapterDictionary.cs
- ThicknessAnimationUsingKeyFrames.cs
- SymbolMethod.cs
- SourceFileInfo.cs
- TdsParser.cs
- EventProxy.cs
- precedingsibling.cs
- PreProcessor.cs
- TreeNodeCollection.cs
- ProfilePropertyMetadata.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- MaterialGroup.cs
- CachedCompositeFamily.cs
- ProtocolViolationException.cs
- BuiltInPermissionSets.cs