diff options
Diffstat (limited to 'Xamarin.Forms.Core/ResourceDictionary.cs')
-rw-r--r-- | Xamarin.Forms.Core/ResourceDictionary.cs | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/Xamarin.Forms.Core/ResourceDictionary.cs b/Xamarin.Forms.Core/ResourceDictionary.cs index b19773ff..e5e08bc6 100644 --- a/Xamarin.Forms.Core/ResourceDictionary.cs +++ b/Xamarin.Forms.Core/ResourceDictionary.cs @@ -2,13 +2,38 @@ using System; using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; +using System.Reflection; +using System.Linq; namespace Xamarin.Forms { - public sealed class ResourceDictionary : IResourceDictionary, IDictionary<string, object> + public class ResourceDictionary : IResourceDictionary, IDictionary<string, object> { readonly Dictionary<string, object> _innerDictionary = new Dictionary<string, object>(); + Type _mergedWith; + [TypeConverter (typeof(TypeTypeConverter))] + public Type MergedWith { + get { return _mergedWith; } + set { + if (_mergedWith == value) + return; + _mergedWith = value; + if (_mergedWith == null) + return; + + _mergedInstance = _mergedWith.GetTypeInfo().BaseType.GetTypeInfo().DeclaredMethods.First(mi => mi.Name == "GetInstance").Invoke(null, new object[] {_mergedWith}) as ResourceDictionary; + } + } + + static ResourceDictionary _instance; + static ResourceDictionary GetInstance(Type type) + { + return _instance ?? (_instance = ((ResourceDictionary)Activator.CreateInstance (type))); + } + + ResourceDictionary _mergedInstance; + void ICollection<KeyValuePair<string, object>>.Add(KeyValuePair<string, object> item) { ((ICollection<KeyValuePair<string, object>>)_innerDictionary).Add(item); @@ -94,7 +119,7 @@ namespace Xamarin.Forms public bool TryGetValue(string key, out object value) { - return _innerDictionary.TryGetValue(key, out value); + return _innerDictionary.TryGetValue(key, out value) || (_mergedInstance != null && _mergedInstance.TryGetValue(key, out value)); } event EventHandler<ResourcesChangedEventArgs> IResourceDictionary.ValuesChanged |