@@ -1735,31 +1735,23 @@ private object FetchResource(
1735
1735
DeferredResourceReference deferredResourceReference ;
1736
1736
if ( ! IsThemeDictionary )
1737
1737
{
1738
- // Cache the deferredResourceReference so that it can be validated
1739
- // in case of a dictionary change prior to its inflation
1740
- if ( _deferredResourceReferences == null )
1741
- {
1742
- _deferredResourceReferences = new DeferredResourceReferenceList ( ) ;
1743
- }
1744
-
1745
- if ( _deferredResourceReferences . Get ( resourceKey ) is { } existingDeferredResourceReference
1746
- && existingDeferredResourceReference . Dictionary == this )
1738
+ if ( _ownerApps != null )
1747
1739
{
1748
- deferredResourceReference = existingDeferredResourceReference ;
1740
+ deferredResourceReference = new DeferredAppResourceReference ( this , resourceKey ) ;
1749
1741
}
1750
1742
else
1751
1743
{
1752
- if ( _ownerApps != null )
1753
- {
1754
- deferredResourceReference = new DeferredAppResourceReference ( this , resourceKey ) ;
1755
- }
1756
- else
1757
- {
1758
- deferredResourceReference = new DeferredResourceReference ( this , resourceKey ) ;
1759
- }
1744
+ deferredResourceReference = new DeferredResourceReference ( this , resourceKey ) ;
1745
+ }
1760
1746
1761
- _deferredResourceReferences . AddOrSet ( deferredResourceReference ) ;
1747
+ // Cache the deferredResourceReference so that it can be validated
1748
+ // in case of a dictionary change prior to its inflation
1749
+ if ( _deferredResourceReferences == null )
1750
+ {
1751
+ _deferredResourceReferences = new WeakReferenceList ( ) ;
1762
1752
}
1753
+
1754
+ _deferredResourceReferences . Add ( deferredResourceReference , true /*SkipFind*/ ) ;
1763
1755
}
1764
1756
else
1765
1757
{
@@ -1783,18 +1775,22 @@ private void ValidateDeferredResourceReferences(object resourceKey)
1783
1775
{
1784
1776
if ( _deferredResourceReferences != null )
1785
1777
{
1786
- DeferredResourceReference deferredResourceReference = _deferredResourceReferences . Get ( resourceKey ) ;
1787
-
1788
- if ( deferredResourceReference is not null )
1778
+ foreach ( Object o in _deferredResourceReferences )
1789
1779
{
1790
- // This will inflate the deferred reference, causing it
1791
- // to be removed from the list. The list may also be
1792
- // purged of dead references.
1793
- deferredResourceReference . GetValue ( BaseValueSourceInternal . Unknown ) ;
1780
+
1781
+ DeferredResourceReference deferredResourceReference = o as DeferredResourceReference ;
1782
+ if ( deferredResourceReference != null && ( resourceKey == null || Object . Equals ( resourceKey , deferredResourceReference . Key ) ) )
1783
+ {
1784
+ // This will inflate the deferred reference, causing it
1785
+ // to be removed from the list. The list may also be
1786
+ // purged of dead references.
1787
+ deferredResourceReference . GetValue ( BaseValueSourceInternal . Unknown ) ;
1788
+ }
1794
1789
}
1795
1790
}
1796
1791
}
1797
1792
1793
+
1798
1794
/// <summary>
1799
1795
/// Called when the MergedDictionaries collection changes
1800
1796
/// </summary>
@@ -2057,7 +2053,7 @@ internal WeakReferenceList ApplicationOwners
2057
2053
2058
2054
#region Properties
2059
2055
2060
- internal DeferredResourceReferenceList DeferredResourceReferences
2056
+ internal WeakReferenceList DeferredResourceReferences
2061
2057
{
2062
2058
get { return _deferredResourceReferences ; }
2063
2059
}
@@ -2482,7 +2478,10 @@ private void MoveDeferredResourceReferencesFrom(ResourceDictionary loadedRD)
2482
2478
// redirect each entry toward its new owner
2483
2479
if ( _deferredResourceReferences != null )
2484
2480
{
2485
- _deferredResourceReferences . ChangeDictionary ( this ) ;
2481
+ foreach ( DeferredResourceReference drr in _deferredResourceReferences )
2482
+ {
2483
+ drr . Dictionary = this ;
2484
+ }
2486
2485
}
2487
2486
}
2488
2487
@@ -2549,7 +2548,7 @@ private enum FallbackState
2549
2548
private WeakReferenceList _ownerFEs = null ;
2550
2549
private WeakReferenceList _ownerFCEs = null ;
2551
2550
private WeakReferenceList _ownerApps = null ;
2552
- private DeferredResourceReferenceList _deferredResourceReferences = null ;
2551
+ private WeakReferenceList _deferredResourceReferences = null ;
2553
2552
private ObservableCollection < ResourceDictionary > _mergedDictionaries = null ;
2554
2553
private Uri _source = null ;
2555
2554
private Uri _baseUri = null ;
0 commit comments