diff --git a/src/Markup/Perspex.Markup.Xaml/Context/PerspexNamespaceRegistry.cs b/src/Markup/Perspex.Markup.Xaml/Context/PerspexNamespaceRegistry.cs index 88a5dc49df..c7bd36bca0 100644 --- a/src/Markup/Perspex.Markup.Xaml/Context/PerspexNamespaceRegistry.cs +++ b/src/Markup/Perspex.Markup.Xaml/Context/PerspexNamespaceRegistry.cs @@ -34,7 +34,7 @@ namespace Perspex.Markup.Xaml.Context private List _clrNamespaces = new List(); private List _namespaces = new List(); - private List _prefixes = new List(); + private Dictionary _prefixes = new Dictionary(); private List _scanned = new List(); public PerspexNamespaceRegistry() @@ -44,7 +44,8 @@ namespace Perspex.Markup.Xaml.Context RegisterPrefix(new PrefixRegistration(string.Empty, PerspexNs)); } - public IEnumerable RegisteredPrefixes => _prefixes; + public IEnumerable RegisteredPrefixes => + _prefixes.Select(x => new PrefixRegistration(x.Key, x.Value)); public void AddNamespace(XamlNamespace xamlNamespace) { @@ -82,14 +83,21 @@ namespace Perspex.Markup.Xaml.Context public Namespace GetNamespaceByPrefix(string prefix) { - var ns = _prefixes.FirstOrDefault(x => x.Prefix == prefix)?.Ns; - return (ns != null) ? GetNamespace(ns) : null; + string uri; + + if (_prefixes.TryGetValue(prefix, out uri)) + { + return GetNamespace(uri); + } + + return null; } public void RegisterPrefix(PrefixRegistration prefixRegistration) { - _prefixes.Add(prefixRegistration); + _prefixes[prefixRegistration.Prefix] = prefixRegistration.Ns; } + private static bool IsClrNamespace(string ns) { return ns.StartsWith(ClrNamespace);