diff --git a/src/Avalonia.Base/Collections/AvaloniaDictionary.cs b/src/Avalonia.Base/Collections/AvaloniaDictionary.cs
index 1aa239180c..9f2a271092 100644
--- a/src/Avalonia.Base/Collections/AvaloniaDictionary.cs
+++ b/src/Avalonia.Base/Collections/AvaloniaDictionary.cs
@@ -16,6 +16,7 @@ namespace Avalonia.Collections
/// The type of the dictionary key.
/// The type of the dictionary value.
public class AvaloniaDictionary : IDictionary,
+ IDictionary,
INotifyCollectionChanged,
INotifyPropertyChanged
{
@@ -51,6 +52,18 @@ namespace Avalonia.Collections
///
public ICollection Values => _inner.Values;
+ public bool IsFixedSize => ((IDictionary)_inner).IsFixedSize;
+
+ ICollection IDictionary.Keys => ((IDictionary)_inner).Keys;
+
+ ICollection IDictionary.Values => ((IDictionary)_inner).Values;
+
+ public bool IsSynchronized => ((IDictionary)_inner).IsSynchronized;
+
+ public object SyncRoot => ((IDictionary)_inner).SyncRoot;
+
+ public object this[object key] { get => ((IDictionary)_inner)[key]; set => ((IDictionary)_inner)[key] = value; }
+
///
/// Gets or sets the named resource.
///
@@ -174,6 +187,12 @@ namespace Avalonia.Collections
return _inner.GetEnumerator();
}
+ ///
+ void ICollection.CopyTo(Array array, int index)
+ {
+ ((ICollection)_inner).CopyTo(array, index);
+ }
+
///
void ICollection>.Add(KeyValuePair item)
{
@@ -192,6 +211,30 @@ namespace Avalonia.Collections
return Remove(item.Key);
}
+ ///
+ void IDictionary.Add(object key, object value)
+ {
+ Add((TKey)key, (TValue)value);
+ }
+
+ ///
+ bool IDictionary.Contains(object key)
+ {
+ return ((IDictionary)_inner).Contains(key);
+ }
+
+ ///
+ IDictionaryEnumerator IDictionary.GetEnumerator()
+ {
+ return ((IDictionary)_inner).GetEnumerator();
+ }
+
+ ///
+ void IDictionary.Remove(object key)
+ {
+ Remove((TKey)key);
+ }
+
private void NotifyAdd(TKey key, TValue value)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Count"));
diff --git a/src/Avalonia.Styling/Controls/ResourceDictionary.cs b/src/Avalonia.Styling/Controls/ResourceDictionary.cs
index 58dee17775..1e35afa771 100644
--- a/src/Avalonia.Styling/Controls/ResourceDictionary.cs
+++ b/src/Avalonia.Styling/Controls/ResourceDictionary.cs
@@ -1,92 +1,14 @@
using System;
using System.Collections;
-using System.Collections.Generic;
+using Avalonia.Collections;
namespace Avalonia.Controls
{
///
/// An indexed dictionary of resources.
///
- public class ResourceDictionary : IResourceDictionary, IDictionary
+ public class ResourceDictionary : AvaloniaDictionary, IResourceDictionary, IDictionary
{
- private Dictionary _inner = new Dictionary();
-
- public object this[string key]
- {
- get { return _inner[key]; }
- set { _inner[key] = value; }
- }
-
- public int Count => _inner.Count;
-
- ICollection IDictionary.Keys => _inner.Keys;
-
- ICollection