@@ -1785,33 +1785,11 @@ private object FetchResource(
1785
1785
DeferredResourceReference deferredResourceReference ;
1786
1786
if ( ! IsThemeDictionary )
1787
1787
{
1788
- if ( FrameworkAppContextSwitches . DisableDynamicResourceOptimization )
1789
- {
1790
- if ( _ownerApps is not null )
1791
- {
1792
- deferredResourceReference = new DeferredAppResourceReference ( this , resourceKey ) ;
1793
- }
1794
- else
1795
- {
1796
- deferredResourceReference = new DeferredResourceReference ( this , resourceKey ) ;
1797
- }
1798
-
1799
- // Cache the deferredResourceReference so that it can be validated
1800
- // in case of a dictionary change prior to its inflation
1801
- if ( _weakDeferredResourceReferences is null )
1802
- {
1803
- _weakDeferredResourceReferences = new WeakReferenceList ( ) ;
1804
- }
1805
-
1806
- _weakDeferredResourceReferences . Add ( deferredResourceReference , true /*SkipFind*/ ) ;
1807
- }
1808
- else
1809
- {
1810
- // Cache the deferredResourceReference so that it can be validated
1811
- // in case of a dictionary change prior to its inflation
1812
- deferredResourceReference = _ownerApps is not null ? new DeferredAppResourceReference ( this , resourceKey ) : new DeferredResourceReference ( this , resourceKey ) ;
1813
- GetOrCreateWeakReferenceList ( resourceKey ) . Add ( deferredResourceReference , true /*SkipFind*/ ) ;
1814
- }
1788
+
1789
+ // Cache the deferredResourceReference so that it can be validated
1790
+ // in case of a dictionary change prior to its inflation
1791
+ deferredResourceReference = _ownerApps is not null ? new DeferredAppResourceReference ( this , resourceKey ) : new DeferredResourceReference ( this , resourceKey ) ;
1792
+ GetOrCreateWeakReferenceList ( resourceKey ) . Add ( deferredResourceReference , true /*SkipFind*/ ) ;
1815
1793
}
1816
1794
else
1817
1795
{
@@ -1842,17 +1820,10 @@ private WeakReferenceList GetOrCreateWeakReferenceList(object resourceKey)
1842
1820
1843
1821
internal void RemoveDeferredResourceReference ( DeferredResourceReference deferredResourceReference )
1844
1822
{
1845
- if ( FrameworkAppContextSwitches . DisableDynamicResourceOptimization )
1823
+
1824
+ if ( this . _weakDeferredResourceReferencesMap ? . TryGetValue ( deferredResourceReference . Key , out var weakDeferredResourceReferences ) is true )
1846
1825
{
1847
- _weakDeferredResourceReferences ? . Remove ( deferredResourceReference ) ;
1848
- }
1849
- else
1850
- {
1851
- //GetWeakReferenceList(deferredResourceReference.Key)?.Remove(deferredResourceReference);
1852
- if ( this . _weakDeferredResourceReferencesMap ? . TryGetValue ( deferredResourceReference . Key , out var weakDeferredResourceReferences ) is true )
1853
- {
1854
- weakDeferredResourceReferences . Remove ( deferredResourceReference ) ;
1855
- }
1826
+ weakDeferredResourceReferences . Remove ( deferredResourceReference ) ;
1856
1827
}
1857
1828
}
1858
1829
@@ -1862,52 +1833,33 @@ internal void RemoveDeferredResourceReference(DeferredResourceReference deferred
1862
1833
/// </summary>
1863
1834
private void ValidateDeferredResourceReferences ( object resourceKey )
1864
1835
{
1865
- if ( FrameworkAppContextSwitches . DisableDynamicResourceOptimization )
1836
+
1837
+ if ( _weakDeferredResourceReferencesMap is null )
1866
1838
{
1867
- if ( _weakDeferredResourceReferences != null )
1868
- {
1869
- foreach ( Object o in _weakDeferredResourceReferences )
1870
- {
1871
- DeferredResourceReference deferredResourceReference = o as DeferredResourceReference ;
1872
- if ( deferredResourceReference != null && ( resourceKey == null || Object . Equals ( resourceKey , deferredResourceReference . Key ) ) )
1873
- {
1874
- // This will inflate the deferred reference, causing it
1875
- // to be removed from the list. The list may also be
1876
- // purged of dead references.
1877
- deferredResourceReference . GetValue ( BaseValueSourceInternal . Unknown ) ;
1878
- }
1879
- }
1880
- }
1839
+ return ;
1881
1840
}
1882
- else
1883
- {
1884
- if ( _weakDeferredResourceReferencesMap is null )
1885
- {
1886
- return ;
1887
- }
1888
1841
1889
- if ( resourceKey is null )
1842
+ if ( resourceKey is null )
1843
+ {
1844
+ foreach ( var weakDeferredResourceReferences in _weakDeferredResourceReferencesMap . Values )
1890
1845
{
1891
- foreach ( var weakDeferredResourceReferences in _weakDeferredResourceReferencesMap . Values )
1846
+ foreach ( var weakResourceReference in weakDeferredResourceReferences )
1892
1847
{
1893
- foreach ( var weakResourceReference in weakDeferredResourceReferences )
1894
- {
1895
- DeferredResourceReference deferredResourceReference = weakResourceReference as DeferredResourceReference ;
1848
+ DeferredResourceReference deferredResourceReference = weakResourceReference as DeferredResourceReference ;
1896
1849
1897
- Inflate ( deferredResourceReference ) ;
1898
- }
1850
+ Inflate ( deferredResourceReference ) ;
1899
1851
}
1900
1852
}
1901
- else
1853
+ }
1854
+ else
1855
+ {
1856
+ if ( _weakDeferredResourceReferencesMap . TryGetValue ( resourceKey , out var weakDeferredResourceReferences ) )
1902
1857
{
1903
- if ( _weakDeferredResourceReferencesMap . TryGetValue ( resourceKey , out var weakDeferredResourceReferences ) )
1858
+ foreach ( var weakResourceReference in weakDeferredResourceReferences )
1904
1859
{
1905
- foreach ( var weakResourceReference in weakDeferredResourceReferences )
1906
- {
1907
- DeferredResourceReference deferredResourceReference = weakResourceReference as DeferredResourceReference ;
1860
+ DeferredResourceReference deferredResourceReference = weakResourceReference as DeferredResourceReference ;
1908
1861
1909
- Inflate ( deferredResourceReference ) ;
1910
- }
1862
+ Inflate ( deferredResourceReference ) ;
1911
1863
}
1912
1864
}
1913
1865
}
@@ -2595,37 +2547,20 @@ private void CopyDeferredContentFrom(ResourceDictionary loadedRD)
2595
2547
2596
2548
private void MoveDeferredResourceReferencesFrom ( ResourceDictionary loadedRD )
2597
2549
{
2598
- if ( FrameworkAppContextSwitches . DisableDynamicResourceOptimization )
2599
- {
2600
- // move the list
2601
- _weakDeferredResourceReferences = loadedRD . _weakDeferredResourceReferences ;
2550
+ // move the map and thus the lists
2551
+ _weakDeferredResourceReferencesMap = loadedRD . _weakDeferredResourceReferencesMap ;
2602
2552
2553
+ if ( _weakDeferredResourceReferencesMap is not null )
2554
+ {
2603
2555
// redirect each entry toward its new owner
2604
- if ( _weakDeferredResourceReferences != null )
2556
+ foreach ( var weakDeferredResourceReferences in _weakDeferredResourceReferencesMap . Values )
2605
2557
{
2606
- foreach ( DeferredResourceReference drr in _weakDeferredResourceReferences )
2558
+ foreach ( DeferredResourceReference drr in weakDeferredResourceReferences )
2607
2559
{
2608
2560
drr . Dictionary = this ;
2609
2561
}
2610
2562
}
2611
2563
}
2612
- else
2613
- {
2614
- // move the map and thus the lists
2615
- _weakDeferredResourceReferencesMap = loadedRD . _weakDeferredResourceReferencesMap ;
2616
-
2617
- if ( _weakDeferredResourceReferencesMap is not null )
2618
- {
2619
- // redirect each entry toward its new owner
2620
- foreach ( var weakDeferredResourceReferences in _weakDeferredResourceReferencesMap . Values )
2621
- {
2622
- foreach ( DeferredResourceReference drr in weakDeferredResourceReferences )
2623
- {
2624
- drr . Dictionary = this ;
2625
- }
2626
- }
2627
- }
2628
- }
2629
2564
}
2630
2565
2631
2566
#endregion PrivateMethods
@@ -2691,7 +2626,6 @@ private enum FallbackState
2691
2626
private WeakReferenceList _ownerFEs = null ;
2692
2627
private WeakReferenceList _ownerFCEs = null ;
2693
2628
private WeakReferenceList _ownerApps = null ;
2694
- private WeakReferenceList _weakDeferredResourceReferences = null ;
2695
2629
private Dictionary < object , WeakReferenceList > _weakDeferredResourceReferencesMap = null ;
2696
2630
private ObservableCollection < ResourceDictionary > _mergedDictionaries = null ;
2697
2631
private Uri _source = null ;
0 commit comments