Beispiel #1
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            IXamlSchemaContextProvider schemaContextProvider;
            IAmbientProvider           ambient;

            schemaContextProvider = (IXamlSchemaContextProvider)serviceProvider.GetService(typeof(IXamlSchemaContextProvider));
            ambient = (IAmbientProvider)serviceProvider.GetService(typeof(IAmbientProvider));
            XamlType   RwHolderType      = schemaContextProvider.SchemaContext.GetXamlType(typeof(RWElementResourceHolder));
            XamlMember resourceProperty2 = RwHolderType.GetMember("Resources");
            XamlType   RoHolderType      = schemaContextProvider.SchemaContext.GetXamlType(typeof(ElementResourceHolder));
            XamlMember resourceProperty1 = RoHolderType.GetMember("Resources");
            IEnumerable <AmbientPropertyValue> aEnumerable = ambient.GetAllAmbientValues(null, resourceProperty1, resourceProperty2);

            if (aEnumerable == null)
            {
                return(null);
            }
            foreach (AmbientPropertyValue aValue in aEnumerable)
            {
                if (resourceProperty1.Equals(aValue.RetrievedProperty) || resourceProperty2.Equals(aValue.RetrievedProperty))
                {
                    Dictionary <string, object> resources = (Dictionary <string, object>)aValue.Value;
                    object value;
                    if (resources.TryGetValue(_key, out value))
                    {
                        return(value);
                    }
                }
            }
            string err = String.Format("Resource key {0} not found.", _key);

            throw new InvalidOperationException(err);
        }