summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core/ResourceDictionary.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Core/ResourceDictionary.cs')
-rw-r--r--Xamarin.Forms.Core/ResourceDictionary.cs91
1 files changed, 6 insertions, 85 deletions
diff --git a/Xamarin.Forms.Core/ResourceDictionary.cs b/Xamarin.Forms.Core/ResourceDictionary.cs
index b3cb3214..2fc11ffc 100644
--- a/Xamarin.Forms.Core/ResourceDictionary.cs
+++ b/Xamarin.Forms.Core/ResourceDictionary.cs
@@ -5,8 +5,6 @@ using System.Runtime.CompilerServices;
using System.Linq;
using System.Reflection;
using Xamarin.Forms.Internals;
-using System.Collections.ObjectModel;
-using System.Collections.Specialized;
namespace Xamarin.Forms
{
@@ -14,13 +12,12 @@ namespace Xamarin.Forms
{
static ConditionalWeakTable<Type, ResourceDictionary> s_instances = new ConditionalWeakTable<Type, ResourceDictionary>();
readonly Dictionary<string, object> _innerDictionary = new Dictionary<string, object>();
- ResourceDictionary _mergedInstance;
- Type _mergedWith;
+ Type _mergedWith;
[TypeConverter (typeof(TypeTypeConverter))]
public Type MergedWith {
get { return _mergedWith; }
- set {
+ set {
if (_mergedWith == value)
return;
@@ -31,69 +28,12 @@ namespace Xamarin.Forms
if (_mergedWith == null)
return;
- _mergedInstance = s_instances.GetValue(_mergedWith, (key) => (ResourceDictionary)Activator.CreateInstance(key));
- OnValuesChanged(_mergedInstance.ToArray());
- }
- }
-
- ICollection<ResourceDictionary> _mergedDictionaries;
- public ICollection<ResourceDictionary> MergedDictionaries {
- get {
- if (_mergedDictionaries == null) {
- var col = new ObservableCollection<ResourceDictionary>();
- col.CollectionChanged += MergedDictionaries_CollectionChanged;
- _mergedDictionaries = col;
- }
- return _mergedDictionaries;
- }
- }
-
- IList<ResourceDictionary> _collectionTrack;
-
- void MergedDictionaries_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
- {
- // Move() isn't exposed by ICollection
- if (e.Action == NotifyCollectionChangedAction.Move)
- return;
-
- _collectionTrack = _collectionTrack ?? new List<ResourceDictionary>();
- // Collection has been cleared
- if (e.Action == NotifyCollectionChangedAction.Reset) {
- foreach (var dictionary in _collectionTrack)
- dictionary.ValuesChanged -= Item_ValuesChanged;
-
- _collectionTrack.Clear();
- return;
- }
-
- // New Items
- if (e.NewItems != null)
- {
- foreach (var item in e.NewItems)
- {
- var rd = (ResourceDictionary)item;
- _collectionTrack.Add(rd);
- rd.ValuesChanged += Item_ValuesChanged;
- OnValuesChanged(rd.ToArray());
- }
- }
-
- // Old Items
- if (e.OldItems != null)
- {
- foreach (var item in e.OldItems)
- {
- var rd = (ResourceDictionary)item;
- rd.ValuesChanged -= Item_ValuesChanged;
- _collectionTrack.Remove(rd);
- }
+ _mergedInstance = s_instances.GetValue(_mergedWith,(key) => (ResourceDictionary)Activator.CreateInstance(key));
+ OnValuesChanged (_mergedInstance.ToArray());
}
}
- void Item_ValuesChanged(object sender, ResourcesChangedEventArgs e)
- {
- OnValuesChanged(e.Values.ToArray());
- }
+ ResourceDictionary _mergedInstance;
void ICollection<KeyValuePair<string, object>>.Add(KeyValuePair<string, object> item)
{
@@ -154,10 +94,6 @@ namespace Xamarin.Forms
return _innerDictionary[index];
if (_mergedInstance != null && _mergedInstance.ContainsKey(index))
return _mergedInstance[index];
- if (MergedDictionaries != null)
- foreach (var dict in MergedDictionaries.Reverse())
- if (dict.ContainsKey(index))
- return dict[index];
throw new KeyNotFoundException($"The resource '{index}' is not present in the dictionary.");
}
set
@@ -194,9 +130,6 @@ namespace Xamarin.Forms
internal IEnumerable<KeyValuePair<string, object>> MergedResources {
get {
- if (MergedDictionaries != null)
- foreach (var r in MergedDictionaries.Reverse().SelectMany(x => x.MergedResources))
- yield return r;
if (_mergedInstance != null)
foreach (var r in _mergedInstance.MergedResources)
yield return r;
@@ -207,19 +140,7 @@ namespace Xamarin.Forms
public bool TryGetValue(string key, out object value)
{
- return _innerDictionary.TryGetValue(key, out value)
- || (_mergedInstance != null && _mergedInstance.TryGetValue(key, out value))
- || (MergedDictionaries != null && TryGetMergedDictionaryValue(key, out value));
- }
-
- bool TryGetMergedDictionaryValue(string key, out object value)
- {
- foreach (var dictionary in MergedDictionaries.Reverse())
- if (dictionary.TryGetValue(key, out value))
- return true;
-
- value = null;
- return false;
+ return _innerDictionary.TryGetValue(key, out value) || (_mergedInstance != null && _mergedInstance.TryGetValue(key, out value));
}
event EventHandler<ResourcesChangedEventArgs> IResourceDictionary.ValuesChanged