[reflection] Coop handles icalls in System.Reflection and System.RuntimeTypeHandle...
[mono.git] / mcs / class / referencesource / System.Activities.Presentation / System.Activities.Presentation / System / Activities / Presentation / CachedResourceDictionaryExtension.cs
1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation.  All rights reserved.
3 //----------------------------------------------------------------
4
5 namespace System.Activities.Presentation
6 {
7     using System;
8     using System.Collections.Generic;
9     using System.Linq;
10     using System.Text;
11     using System.Windows;
12     using System.Windows.Markup;
13
14     [MarkupExtensionReturnType(typeof(ResourceDictionary))]
15     public class CachedResourceDictionaryExtension : MarkupExtension
16     {
17         static Dictionary<Uri, ResourceDictionary> Cache = new Dictionary<Uri, ResourceDictionary>();
18
19         public Uri Source { get; set; }
20
21         public override object ProvideValue(IServiceProvider serviceProvider)
22         {
23             ResourceDictionary resourceDictionary = null;
24             // disable caching till the wpf mergedictionaries in theme dictionary bug is fixed.
25             if (!Cache.TryGetValue(this.Source, out resourceDictionary))
26             {
27                 resourceDictionary = new ResourceDictionary();
28                 resourceDictionary.Source = this.Source;
29                 Cache.Add(this.Source, resourceDictionary);
30             }
31             return resourceDictionary;
32         }
33     }
34 }