using System; using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace Xamarin.Forms { public sealed class ResourceDictionary : IResourceDictionary, IDictionary { readonly Dictionary _innerDictionary = new Dictionary(); void ICollection>.Add(KeyValuePair item) { ((ICollection>)_innerDictionary).Add(item); OnValuesChanged(item); } public void Clear() { _innerDictionary.Clear(); } bool ICollection>.Contains(KeyValuePair item) { return ((ICollection>)_innerDictionary).Contains(item); } void ICollection>.CopyTo(KeyValuePair[] array, int arrayIndex) { ((ICollection>)_innerDictionary).CopyTo(array, arrayIndex); } public int Count { get { return _innerDictionary.Count; } } bool ICollection>.IsReadOnly { get { return ((ICollection>)_innerDictionary).IsReadOnly; } } bool ICollection>.Remove(KeyValuePair item) { return ((ICollection>)_innerDictionary).Remove(item); } public void Add(string key, object value) { _innerDictionary.Add(key, value); OnValueChanged(key, value); } public bool ContainsKey(string key) { return _innerDictionary.ContainsKey(key); } [IndexerName("Item")] public object this[string index] { get { return _innerDictionary[index]; } set { _innerDictionary[index] = value; OnValueChanged(index, value); } } public ICollection Keys { get { return _innerDictionary.Keys; } } public bool Remove(string key) { return _innerDictionary.Remove(key); } public ICollection Values { get { return _innerDictionary.Values; } } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_innerDictionary).GetEnumerator(); } public IEnumerator> GetEnumerator() { return _innerDictionary.GetEnumerator(); } public bool TryGetValue(string key, out object value) { return _innerDictionary.TryGetValue(key, out value); } event EventHandler IResourceDictionary.ValuesChanged { add { ValuesChanged += value; } remove { ValuesChanged -= value; } } public void Add(Style style) { if (string.IsNullOrEmpty(style.Class)) Add(style.TargetType.FullName, style); else { IList