protected sealed override bool TryCreateAbsoluteUri(Uri baseUri, Uri sourceUri, out Uri result) { Uri packUri; if (sourceUri != null) { if (SharedThemeResourceDictionary.TryConvertToPackUri(sourceUri, out packUri)) { sourceUri = packUri; } UriDescription sourceUriDescription; if (SharedThemeResourceDictionary.TryGetUriDescription(sourceUri, out sourceUriDescription)) { if (SharedThemeResourceDictionary.IsAssemblyInfoFilled(sourceUriDescription)) { result = SharedThemeResourceDictionary.CreateUri(sourceUriDescription); return(true); } } } if (SharedThemeResourceDictionary.TryConvertToPackUri(baseUri, out packUri)) { baseUri = packUri; } var newBaseUri = this.GetBaseUri(); if (newBaseUri != null) { if (SharedThemeResourceDictionary.TryConvertToPackUri(newBaseUri, out packUri)) { newBaseUri = packUri; } if (baseUri != null) { Uri combinedUri; if (SharedThemeResourceDictionary.TryCombineUri(newBaseUri, baseUri, out combinedUri)) { newBaseUri = combinedUri; } } if (sourceUri != null) { return(SharedThemeResourceDictionary.TryCombineUri(newBaseUri, sourceUri, out result)); } } else { newBaseUri = baseUri; } return(base.TryCreateAbsoluteUri(newBaseUri, sourceUri, out result)); }
private static bool TryCombineUri(Uri baseUri, Uri relativeUri, out Uri result) { result = null; Debug.Assert((baseUri != null) && (relativeUri != null)); Debug.Assert(baseUri.IsAbsoluteUri); UriDescription baseUriDescription; if (!SharedThemeResourceDictionary.TryGetUriDescription(baseUri, out baseUriDescription)) { return(false); } UriDescription relativeUriDescription; if (SharedThemeResourceDictionary.TryGetUriDescription(relativeUri, out relativeUriDescription)) { if (!string.IsNullOrEmpty(relativeUriDescription.AssemblyName) && !string.Equals(relativeUriDescription.AssemblyName, baseUriDescription.AssemblyName, StringComparison.InvariantCultureIgnoreCase)) { return(false); } } else if (relativeUri.IsAbsoluteUri) { return(false); } else { relativeUriDescription = null; } var baseUriPath = baseUriDescription.RelativePath; var relativeUriPath = (relativeUriDescription != null) ? relativeUriDescription.RelativePath : Uri.EscapeUriString(relativeUri.ToString()); if (relativeUriPath.StartsWith(SharedThemeResourceDictionary.UriPathSeparator, StringComparison.InvariantCultureIgnoreCase)) { baseUriPath = string.Empty; relativeUriPath = relativeUriPath.Substring(SharedThemeResourceDictionary.UriPathSeparator.Length); } var assemblyDescription = ((relativeUriDescription != null) && !SharedThemeResourceDictionary.IsAssemblyInfoFilled(baseUriDescription)) ? relativeUriDescription : baseUriDescription; var newBaseUri = SharedThemeResourceDictionary.CreateUri( assemblyDescription.AssemblyName, assemblyDescription.AssemblyVersion, assemblyDescription.AssemblyPublicKeyToken, baseUriPath); var newRelativeUri = new Uri(relativeUriPath, UriKind.Relative); return(Uri.TryCreate(newBaseUri, newRelativeUri, out result)); }