Code:
/ DotNET / DotNET / 8.0 / untmp / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataGridViewControlCollection.cs
- MessageCredentialType.cs
- TypedReference.cs
- OdbcUtils.cs
- ExpressionLexer.cs
- ZipIOLocalFileDataDescriptor.cs
- CreateRefExpr.cs
- ProfileServiceManager.cs
- DataObjectFieldAttribute.cs
- AutomationIdentifier.cs
- Publisher.cs
- FocusWithinProperty.cs
- XmlSchemaSimpleContent.cs
- IndexedEnumerable.cs
- MD5.cs
- ReaderWriterLockWrapper.cs
- MimeMultiPart.cs
- EventArgs.cs
- NumericUpDownAcceleration.cs
- MergeEnumerator.cs
- MetadataCache.cs
- InputLanguageProfileNotifySink.cs
- Converter.cs
- CompModSwitches.cs
- IteratorFilter.cs
- TextBox.cs
- RtfNavigator.cs
- UserPreferenceChangedEventArgs.cs
- PolyBezierSegmentFigureLogic.cs
- CodeLinePragma.cs
- RC2CryptoServiceProvider.cs
- BinaryMethodMessage.cs
- Header.cs
- WebPartEventArgs.cs
- ExpressionNormalizer.cs
- Point3DCollectionConverter.cs
- AxWrapperGen.cs
- Calendar.cs
- MatrixConverter.cs
- CaseInsensitiveOrdinalStringComparer.cs
- Win32Native.cs
- FileClassifier.cs
- WindowsClientCredential.cs
- CodeIdentifiers.cs
- AssemblySettingAttributes.cs
- IdentityNotMappedException.cs
- DataGridViewHitTestInfo.cs
- ExpressionDumper.cs
- GeometryModel3D.cs
- SessionStateUtil.cs
- DocumentsTrace.cs
- DecoderExceptionFallback.cs
- UdpSocketReceiveManager.cs
- RectangleHotSpot.cs
- WebPartDeleteVerb.cs
- XamlTreeBuilder.cs
- XmlSignatureProperties.cs
- QueryConverter.cs
- DbDataSourceEnumerator.cs
- TopClause.cs
- XmlNavigatorFilter.cs
- Schema.cs
- FileVersionInfo.cs
- RegisteredExpandoAttribute.cs
- TriggerCollection.cs
- StatusBarItem.cs
- OlePropertyStructs.cs
- ClientApiGenerator.cs
- ContextMenuAutomationPeer.cs
- UInt16.cs
- ComAwareEventInfo.cs
- StsCommunicationException.cs
- DesignerValidatorAdapter.cs
- FunctionImportElement.cs
- XmlStringTable.cs
- XamlFrame.cs
- RoleService.cs
- GridViewRowPresenterBase.cs
- XmlLanguage.cs
- CurrencyWrapper.cs
- WebConfigurationFileMap.cs
- SequentialWorkflowHeaderFooter.cs
- SynchronizedRandom.cs
- ElementHostPropertyMap.cs
- OLEDB_Util.cs
- MessageQueueTransaction.cs
- SpecularMaterial.cs
- AlternateViewCollection.cs
- JsonFormatGeneratorStatics.cs
- SqlException.cs
- HttpRequestWrapper.cs
- XmlSchema.cs
- UpdateTracker.cs
- ContainerAction.cs
- XsltSettings.cs
- KnowledgeBase.cs
- ClientSettings.cs
- ConstraintManager.cs
- StringPropertyBuilder.cs
- DetailsViewInsertedEventArgs.cs