internal static object GetRootTemplatedActivity(IServiceProvider serviceProvider)
        {
            IRootObjectProvider service = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;

            if (service == null)
            {
                return(null);
            }
            IAmbientProvider provider2 = serviceProvider.GetService(typeof(IAmbientProvider)) as IAmbientProvider;

            if (provider2 == null)
            {
                return(null);
            }
            IXamlSchemaContextProvider provider3 = serviceProvider.GetService(typeof(IXamlSchemaContextProvider)) as IXamlSchemaContextProvider;

            if (provider3 == null)
            {
                return(null);
            }
            XamlMember member  = GetXamlMember(provider3.SchemaContext, typeof(Activity), "Implementation");
            XamlMember member2 = GetXamlMember(provider3.SchemaContext, typeof(DynamicActivity), "Implementation");

            if ((member == null) || (member2 == null))
            {
                return(null);
            }
            if (provider2.GetFirstAmbientValue(null, new XamlMember[] { member, member2 }) == null)
            {
                return(null);
            }
            return(service.RootObject as Activity);
        }
예제 #2
0
        public object ProvideValue(IServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException("serviceProvider");
            }
            IRootObjectProvider rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;

            if (rootObjectProvider == null)
            {
                throw new ArgumentException("serviceProvider does not provide an IRootObjectProvider");
            }
            if (string.IsNullOrEmpty(this.Name))
            {
                throw new ArgumentNullException("Name");
            }


            Element nameScope = rootObjectProvider.RootObject as Element;
            Element element   = nameScope.FindByName <Element>(this.Name);

            if (element == null)
            {
                throw new ArgumentNullException(string.Format("Can't find element named '{0}'", this.Name));
            }
            object context = element.BindingContext;

            this.rootElement = element;
            IProvideValueTarget ipvt = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));

            this.attachedObject = ipvt.TargetObject as BindableObject;
            this.attachedObject.BindingContextChanged += this.OnContextChanged;

            return(context ?? new object());
        }
예제 #3
0
        internal static void GetRootObjectAndDelegateType(ITypeDescriptorContext context, out object rootObject, out Type delegateType)
        {
            rootObject   = null;
            delegateType = null;

            if (context == null)
            {
                return;
            }

            IRootObjectProvider rootObjectService = context.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;

            if (rootObjectService == null)
            {
                return;
            }
            rootObject = rootObjectService.RootObject;

            IDestinationTypeProvider targetService = context.GetService(typeof(IDestinationTypeProvider)) as IDestinationTypeProvider;

            if (targetService == null)
            {
                return;
            }
            delegateType = targetService.GetDestinationType();
        }
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            IRootObjectProvider rootObjectProvider = (IRootObjectProvider)serviceProvider.GetService(typeof(IRootObjectProvider));
            IDictionary         dictionary         = rootObjectProvider?.RootObject as IDictionary;

            return(dictionary?[ResourceKey]);
        }
예제 #5
0
        /// <summary>
        /// Gets the source type for the root object from markup or from an object graph.
        /// </summary>
        /// <param name="serviceProvider">The object that can provide services for the markup extension.</param>
        /// <returns>The source type for the root object.</returns>
        private static Type GetRootType(IServiceProvider serviceProvider)
        {
            IRootObjectProvider provider = serviceProvider.GetService <IRootObjectProvider>();

            if (provider != null)
            {
                object root = provider.RootObject;
                if (root != null)
                {
                    if (Designer.DesignMode)
                    {
                        if (root is DependencyObject element)
                        {
                            return(Designer.GetDesignType(element));
                        }

                        return(null);
                    }

                    return(root.GetType());
                }
            }

            return(null);
        }
예제 #6
0
        public object ProvideValue(IServiceProvider serviceProvider)
        {
            if (String.IsNullOrEmpty(Source))
            {
                System.Diagnostics.Debug.WriteLine("ImageResourceExtension::ProvideValue - No value supplied for Source.");
                return(null);
            }
            System.Diagnostics.Debug.WriteLine("ImageResourceExtension::ProvideValue - Attempting to load resource '{0}'...", Source);

            ImageSource imageSource = null;
            var         match       = _resourceSplitter.Match(Source);

            if (match.Success)
            {
                var      resourceName = match.Groups["resourceName"].Value;
                var      assemblyName = match.Groups["assemblyName"].Value;
                Assembly assembly     = null;
                if (!String.IsNullOrEmpty(assemblyName))
                {
                    assembly = System.Reflection.Assembly.Load(new AssemblyName(assemblyName));
                }
                else
                {
                    if (serviceProvider == null)
                    {
                        throw new ArgumentNullException("serviceProvider");
                    }
                    IRootObjectProvider rootObjectProvider = serviceProvider.GetService <IRootObjectProvider>();
                    if (rootObjectProvider == null)
                    {
                        throw new ArgumentException("serviceProvider did not provide an IRootObjectProvider");
                    }

                    // Find the root visual element (our view)
                    var visualElement     = rootObjectProvider.RootObject as VisualElement;
                    var visualElementType = visualElement.GetType();
                    assembly = visualElementType.GetTypeInfo().Assembly;
                }

#if DEBUG
                if (assembly != null && !assembly.GetManifestResourceNames().Contains(resourceName))
                {
                    System.Diagnostics.Debug.WriteLine("ImageResourceExtension::ProvideValue - No resource found for stream name '{0}'.", Source);
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine("ImageResourceExtension::ProvideValue - Found resource '{0}'.", Source);
                }
#endif
                // Do your translation lookup here, using whatever method you require
                imageSource = ImageSource.FromStream(() => assembly.GetManifestResourceStream(resourceName));
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("ImageResourceExtension::ProvideValue - Unable to parse source string '{0}'.", Source);
            }

            return(imageSource);
        }
예제 #7
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (string.IsNullOrEmpty(Message))
            {
                throw new InvalidOperationException("Required property Message is invalid.");
            }

            if (serviceProvider == null)
            {
                return(Message);
            }

            var target = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
            FrameworkElement targetControl = null;

            if (target != null)
            {
                targetControl = target.TargetObject as FrameworkElement;
            }
            if (targetControl == null)
            {
                return(Message);
            }

            if (System.ComponentModel.DesignerProperties.GetIsInDesignMode(targetControl))
            {
                return(Message);
            }

            string qualifiedName             = null;
            IRootObjectProvider rootProvider = null;

            if (serviceProvider != null)
            {
                rootProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
            }
            string rootName = null;

            if (rootProvider != null)
            {
                var rootObject = rootProvider.RootObject;
                if (rootObject != null)
                {
                    rootName = rootObject.GetType().ToString();
                }
            }
            if (!string.IsNullOrEmpty(rootName))
            {
                var controlName = targetControl.Name;
                if (!string.IsNullOrEmpty(controlName))
                {
                    qualifiedName = string.Format("{0}:{1}", rootName, controlName);
                }
            }

            string value = (qualifiedName == null) ? Message : $"[{qualifiedName}] {Message}";

            return(value);
        }
예제 #8
0
파일: Alias.cs 프로젝트: Seti-0/NSprak
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            IRootObjectProvider provider = (IRootObjectProvider)serviceProvider.GetService(typeof(IRootObjectProvider));

            return((provider?.RootObject) switch
            {
                FrameworkElement element => element.TryFindResource(Resource),
                IDictionary dictionary => dictionary[Resource],
                _ => null,
            });
예제 #9
0
 void Initialize(PrefixLookup prefixLookup, XamlSchemaContext schemaContext, Func <IAmbientProvider> ambientProvider, IProvideValueTarget provideValue, IRootObjectProvider rootProvider, IDestinationTypeProvider destinationProvider, IXamlObjectWriterFactory objectWriterFactory)
 {
     prefix_lookup            = prefixLookup ?? throw new ArgumentNullException("prefixLookup");
     sctx                     = schemaContext ?? throw new ArgumentNullException("schemaContext");
     _ambientProviderProvider = ambientProvider;
     this.provideValue        = provideValue;
     this.rootProvider        = rootProvider;
     this.destinationProvider = destinationProvider;
     this.objectWriterFactory = objectWriterFactory;
 }
        private void Initialize(IProvideValueTarget valueTargetProvider, IRootObjectProvider rootObjectProvider)
        {
            // if XamlCompilation is active, IRootObjectProvider is not available, but SimpleValueTargetProvider is available
            // if XamlCompilation is inactive, IRootObjectProvider is available, but SimpleValueTargetProvider is not available
            object rootObject;

            var propertyInfo = valueTargetProvider.GetType().GetTypeInfo().DeclaredProperties.FirstOrDefault(dp => dp.Name.Contains("ParentObjects"));

            if (propertyInfo == null)
            {
                throw new ArgumentNullException("ParentObjects");
            }
            var parentObjects = (propertyInfo.GetValue(valueTargetProvider) as IEnumerable <object>).ToList();

            BindableTree = parentObjects.Cast <BindableObject>();

            if (rootObjectProvider == null && valueTargetProvider == null)
            {
                throw new ArgumentException("serviceProvider does not provide an IRootObjectProvider or SimpleValueTargetProvider");
            }
            if (rootObjectProvider == null)
            {
                var parentObject = parentObjects.FirstOrDefault(pO => pO.GetType().GetTypeInfo().IsSubclassOf(typeof(Page)));

                BindableObjectRaw = parentObjects.FirstOrDefault();
                Bindable          = BindableObjectRaw as BindableObject;
                rootObject        = parentObject;
            }
            else
            {
                rootObject        = rootObjectProvider.RootObject;
                BindableObjectRaw = valueTargetProvider.TargetObject;
                Bindable          = BindableObjectRaw as BindableObject;
            }

            BindablePropertyRaw = valueTargetProvider.TargetProperty;
            if (BindablePropertyRaw is BindableProperty bp)
            {
                BindableProp = bp;
                PropertyName = bp.PropertyName;
            }
            else if (BindablePropertyRaw is PropertyInfo pi)
            {
                PropertyName = pi.Name;
            }
            else if (BindablePropertyRaw != null)
            {
                PropertyName = BindablePropertyRaw.ToString();
            }

            if (rootObject is Page providedPage)
            {
                SourcePage = SourcePage ?? providedPage;
            }
        }
예제 #11
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            IRootObjectProvider rootObjectProvider = (IRootObjectProvider)serviceProvider.GetService(typeof(IRootObjectProvider));
            object obj = ((Service)rootObjectProvider.RootObject).Resources[this.Name];

            if (obj is Activity)
            {
                return(((Activity)obj).Clone());
            }
            throw new InvalidOperationException("ActivityReference can't reference to a value which is not an Activity");
        }
예제 #12
0
        /// <summary>
        /// Returns an object that is provided as the value of the target property for this markup extension.
        /// </summary>
        /// <param name="serviceProvider">A service provider helper that can provide services for the markup extension.</param>
        /// <returns>The object value to set on the property where the extension is applied.</returns>
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (serviceProvider != null)
            {
                IRootObjectProvider provider = serviceProvider.GetService <IRootObjectProvider>();

                return(provider?.RootObject);
            }

            return(this);
        }
예제 #13
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            IRootObjectProvider provider = serviceProvider.GetService
                                               (typeof(IRootObjectProvider)) as IRootObjectProvider;

            if (provider != null)
            {
                return(provider.RootObject);
            }

            return(null);
        }
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value != null)
            {
                if (context == null)
                {
                    throw new ArgumentNullException("context");
                }

                XamlSchemaContext xamlSchemaContext =
                    RequireService <IXamlSchemaContextProvider>(context).SchemaContext;
                Baml2006SchemaContext schemaContext = xamlSchemaContext as Baml2006SchemaContext;
                if (schemaContext == null)
                {
                    throw new InvalidOperationException(SR.Get(SRID.ExpectedBamlSchemaContext));
                }

                IXamlObjectWriterFactory objectWriterFactory =
                    RequireService <IXamlObjectWriterFactory>(context);
                IProvideValueTarget ipvt =
                    RequireService <IProvideValueTarget>(context);
                IRootObjectProvider rootObjectProvider =
                    RequireService <IRootObjectProvider>(context);

                ResourceDictionary dictionary = ipvt.TargetObject as ResourceDictionary;
                if (dictionary == null)
                {
                    throw new InvalidOperationException(SR.Get(SRID.ExpectedResourceDictionaryTarget));
                }

                Stream stream = value as Stream;
                if (stream == null)
                {
                    byte[] bytes = value as byte[];
                    if (bytes != null)
                    {
                        stream = new MemoryStream(bytes);
                    }
                }
                if (stream == null)
                {
                    throw new InvalidOperationException(SR.Get(SRID.ExpectedBinaryContent));
                }

                //
                DeferrableContent deferrableContext = new DeferrableContent(stream, schemaContext,
                                                                            objectWriterFactory, context, rootObjectProvider.RootObject);
                return(deferrableContext);
            }

            return(base.ConvertFrom(context, culture, value));
        }
예제 #15
0
        protected TypeInfo GetRootObjectType(IServiceProvider serviceProvider)
        {
            // Little workaround to get page object https://forums.xamarin.com/discussion/33678/x-reference-not-working
            IRootObjectProvider       rootObjectProvider  = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
            SimpleValueTargetProvider valueTargetProvider =
                serviceProvider.GetService(typeof(IProvideValueTarget)) as SimpleValueTargetProvider;

            // If XamlCompilation is active, IRootObjectProvider is not available, but SimpleValueTargetProvider is available
            // If XamlCompilation is inactive, IRootObjectProvider is available, but SimpleValueTargetProvider is not available
            if (rootObjectProvider == null && valueTargetProvider == null)
            {
                throw new ArgumentException(
                          $"{nameof(serviceProvider)} does not provide an {nameof(IRootObjectProvider)} or {nameof(SimpleValueTargetProvider)}");
            }


            if (rootObjectProvider != null)
            {
                if (rootObjectProvider.RootObject is ResourceDictionary dictionary)
                {
                    return(dictionary?.GetType().GetTypeInfo());
                }

                return((rootObjectProvider.RootObject as Element)?.GetType().GetTypeInfo());
            }

            PropertyInfo propertyInfo = valueTargetProvider.GetType()
                                        .GetTypeInfo()
                                        .DeclaredProperties.FirstOrDefault(dp => dp.Name.Contains("ParentObjects"));

            if (propertyInfo == null)
            {
                throw new ArgumentNullException("ParentObjects");
            }

            IEnumerable <object> parentObjects = propertyInfo.GetValue(valueTargetProvider) as IEnumerable <object>;
            object parentObject = parentObjects?.LastOrDefault(x => x.GetType().GetTypeInfo().IsSubclassOf(typeof(ResourceDictionary)));

            if (parentObject == null)
            {
                parentObject = parentObjects?.LastOrDefault(x => x.GetType().GetTypeInfo().IsSubclassOf(typeof(Element)));
            }

            if (parentObject == null)
            {
                throw new ArgumentNullException("parentObject");
            }

            return(parentObject.GetType().GetTypeInfo());
        }
		public ValueSerializerContext (PrefixLookup prefixLookup, XamlSchemaContext schemaContext, IAmbientProvider ambientProvider, IProvideValueTarget provideValue, IRootObjectProvider rootProvider)
		{
			if (prefixLookup == null)
				throw new ArgumentNullException ("prefixLookup");
			if (schemaContext == null)
				throw new ArgumentNullException ("schemaContext");
			prefix_lookup = prefixLookup;
			namespace_resolver = new NamespaceResolver (prefix_lookup.Namespaces);
			type_resolver = new XamlTypeResolver (namespace_resolver, schemaContext);
			sctx = schemaContext;
			ambient_provider = ambientProvider;
			this.provideValue = provideValue;
			this.rootProvider = rootProvider;
		}
예제 #17
0
        public object ProvideValue(IServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException("serviceProvider");
            }
            IRootObjectProvider rootObjectProvider = serviceProvider.GetService <IRootObjectProvider>();

            if (rootObjectProvider == null)
            {
                throw new ArgumentException("serviceProvider did not provide an IRootObjectProvider");
            }

            // Find the root visual element (our view)
            var visualElement     = rootObjectProvider.RootObject as VisualElement;
            var visualElementType = visualElement.GetType();

            // If the XAML contains an explicit resource namespace and/or name,
            // we will use those.
            var resourceNamespace = ResourceNamespace;
            var resourceName      = ResourceName;

            // If no resource namespace was provided, we'll use whatever was
            // supplied as a default.
            if (String.IsNullOrEmpty(resourceNamespace))
            {
                resourceNamespace = DefaultResourceNamespace;
            }

            // If no resource name was provided, we'll use the name of the
            // class that backs the XAML view.
            if (String.IsNullOrEmpty(resourceName))
            {
                resourceName = visualElementType.Name;
            }

            // Use the class factory to get an instance of an ILocalizer
            var localizer = GetLocalizer(visualElementType.GetTypeInfo().Assembly);

            // Combine the name and resource namespace to get the localized string
            String localizationResult = _localizer.GetText(resourceNamespace, resourceName, ID);

            if (String.IsNullOrEmpty(localizationResult))
            {
                localizationResult = "ResourceNotFound";
            }

            return(localizationResult);
        }
예제 #18
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            IRootObjectProvider rootObjectProvider = (IRootObjectProvider)
                                                     serviceProvider.GetService(typeof(IRootObjectProvider));

            if (rootObjectProvider == null)
            {
                return(null);
            }
            IDictionary dictionary = rootObjectProvider.RootObject as IDictionary;

            if (dictionary == null)
            {
                return(null);
            }
            return(dictionary[ResourceKey]);
        }
예제 #19
0
 internal static void GetRootObjectAndDelegateType(ITypeDescriptorContext context, out object rootObject, out Type delegateType)
 {
     rootObject   = null;
     delegateType = null;
     if (context != null)
     {
         IRootObjectProvider service = context.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
         if (service != null)
         {
             rootObject = service.RootObject;
             IDestinationTypeProvider provider2 = context.GetService(typeof(IDestinationTypeProvider)) as IDestinationTypeProvider;
             if (provider2 != null)
             {
                 delegateType = provider2.GetDestinationType();
             }
         }
     }
 }
예제 #20
0
        public void XamlServiceProviderIRootObjectProvider()
        {
            tlog.Debug(tag, $"XamlServiceProviderIRootObjectProvider START");

            try
            {
                IRootObjectProvider i1 = x1.IRootObjectProvider;
                x1.IRootObjectProvider = i1;
            }
            catch (Exception e)
            {
                Tizen.Log.Error(tag, "Caught Exception" + e.ToString());
                Assert.Fail("Caught Exception" + e.ToString());
            }

            tlog.Debug(tag, $"XamlServiceProviderIRootObjectProvider END (OK)");
            Assert.Pass("XamlServiceProviderIRootObjectProvider");
        }
 public ValueSerializerContext(PrefixLookup prefixLookup, XamlSchemaContext schemaContext, IAmbientProvider ambientProvider, IProvideValueTarget provideValue, IRootObjectProvider rootProvider, IDestinationTypeProvider destinationProvider, IXamlObjectWriterFactory objectWriterFactory)
 {
     if (prefixLookup == null)
     {
         throw new ArgumentNullException("prefixLookup");
     }
     if (schemaContext == null)
     {
         throw new ArgumentNullException("schemaContext");
     }
     prefix_lookup            = prefixLookup;
     sctx                     = schemaContext;
     ambient_provider         = ambientProvider;
     this.provideValue        = provideValue;
     this.rootProvider        = rootProvider;
     this.destinationProvider = destinationProvider;
     this.objectWriterFactory = objectWriterFactory;
 }
예제 #22
0
        object GetSourceObject(IServiceProvider serviceProvider)
        {
            IRootObjectProvider rootObjectProvider = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
            FrameworkElement    rootObject         = rootObjectProvider?.RootObject as FrameworkElement;

            if (rootObject == null)
            {
                throw new NullReferenceException();
            }
            if (ElementName != null)
            {
                return(rootObject.FindName(ElementName));
            }
            else
            {
                return(rootObject);
            }
        }
        /// <summary>
        ///     Convert a string like "Button.Click" into the corresponding RoutedEvent
        /// </summary>
        public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext,
                                           CultureInfo cultureInfo,
                                           object source)
        {
            if (typeDescriptorContext == null)
            {
                throw new ArgumentNullException("typeDescriptorContext");
            }
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (s_ServiceProviderContextType == null)
            {
                // get typeof(MS.Internal.Xaml.ServiceProviderContext) via reflection
                Assembly a = typeof(IRootObjectProvider).Assembly;
                s_ServiceProviderContextType = a.GetType("MS.Internal.Xaml.ServiceProviderContext");
            }
            if (typeDescriptorContext.GetType() != s_ServiceProviderContextType)
            {
                // if the caller is not the XAML parser, don't answer.   This avoids
                // returning an arbitrary delegate to a (possibly malicious) caller.
                // See Dev11 629384.
                throw new ArgumentException(SR.Get(SRID.TextRange_InvalidParameterValue), "typeDescriptorContext");
            }
            IRootObjectProvider rootProvider = typeDescriptorContext.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;

            if (rootProvider != null && source is String)
            {
                IProvideValueTarget ipvt = typeDescriptorContext.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
                if (ipvt != null)
                {
                    EventSetter setter = ipvt.TargetObject as EventSetter;
                    string      handlerName;
                    if (setter != null && (handlerName = source as string) != null)
                    {
                        handlerName = handlerName.Trim();
                        return(Delegate.CreateDelegate(setter.Event.HandlerType, rootProvider.RootObject, handlerName));
                    }
                }
            }

            throw GetConvertFromException(source);
        }
예제 #24
0
 public ValueSerializerContext(PrefixLookup prefixLookup, XamlSchemaContext schemaContext, IAmbientProvider ambientProvider, IProvideValueTarget provideValue, IRootObjectProvider rootProvider, IDestinationTypeProvider destinationProvider)
 {
     if (prefixLookup == null)
     {
         throw new ArgumentNullException("prefixLookup");
     }
     if (schemaContext == null)
     {
         throw new ArgumentNullException("schemaContext");
     }
     prefix_lookup      = prefixLookup;
     namespace_resolver = new NamespaceResolver(prefix_lookup.Namespaces);
     type_resolver      = new XamlTypeResolver(namespace_resolver, schemaContext);
     sctx                     = schemaContext;
     ambient_provider         = ambientProvider;
     this.provideValue        = provideValue;
     this.rootProvider        = rootProvider;
     this.destinationProvider = destinationProvider;
 }
예제 #25
0
        /// <summary>Converts the specified stream to a new <see cref="T:System.Windows.DeferrableContent" /> object.</summary>
        /// <param name="context">An <see cref="T:System.ComponentModel.ITypeDescriptorContext" /> that provides a format context. </param>
        /// <param name="culture">The <see cref="T:System.Globalization.CultureInfo" /> to use as the current culture. </param>
        /// <param name="value">The source stream to convert.</param>
        /// <returns>A new <see cref="T:System.Windows.DeferrableContent" /> object.</returns>
        /// <exception cref="T:System.ArgumentNullException">
        ///         <paramref name="context" /> is <see langword="null" />.</exception>
        /// <exception cref="T:System.InvalidOperationException">
        ///         <paramref name="context" /> is not able to provide the necessary XAML schema context for BAML.-or-
        ///         <see cref="T:System.Windows.Markup.IProvideValueTarget" /> service interpretation of <paramref name="context" /> determines that the target object is not a <see cref="T:System.Windows.ResourceDictionary" />.-or-
        ///         <paramref name="value" /> is not a valid byte stream.</exception>
        // Token: 0x060003AC RID: 940 RVA: 0x0000A73C File Offset: 0x0000893C
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value == null)
            {
                return(base.ConvertFrom(context, culture, value));
            }
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            XamlSchemaContext     schemaContext         = DeferrableContentConverter.RequireService <IXamlSchemaContextProvider>(context).SchemaContext;
            Baml2006SchemaContext baml2006SchemaContext = schemaContext as Baml2006SchemaContext;

            if (baml2006SchemaContext == null)
            {
                throw new InvalidOperationException(SR.Get("ExpectedBamlSchemaContext"));
            }
            IXamlObjectWriterFactory objectWriterFactory = DeferrableContentConverter.RequireService <IXamlObjectWriterFactory>(context);
            IProvideValueTarget      provideValueTarget  = DeferrableContentConverter.RequireService <IProvideValueTarget>(context);
            IRootObjectProvider      rootObjectProvider  = DeferrableContentConverter.RequireService <IRootObjectProvider>(context);

            if (!(provideValueTarget.TargetObject is ResourceDictionary))
            {
                throw new InvalidOperationException(SR.Get("ExpectedResourceDictionaryTarget"));
            }
            Stream stream = value as Stream;

            if (stream == null)
            {
                byte[] array = value as byte[];
                if (array != null)
                {
                    stream = new MemoryStream(array);
                }
            }
            if (stream == null)
            {
                throw new InvalidOperationException(SR.Get("ExpectedBinaryContent"));
            }
            return(new DeferrableContent(stream, baml2006SchemaContext, objectWriterFactory, context, rootObjectProvider.RootObject));
        }
예제 #26
0
        private void Initialize(IProvideValueTarget valueTargetProvider, IRootObjectProvider rootObjectProvider)
        {
            // if XamlCompilation is active, IRootObjectProvider is not available, but SimpleValueTargetProvider is available
            // if XamlCompilation is inactive, IRootObjectProvider is available, but SimpleValueTargetProvider is not available
            object rootObject;
            //object bindable;

            var propertyInfo = valueTargetProvider.GetType().GetTypeInfo().DeclaredProperties.FirstOrDefault(dp => dp.Name.Contains("ParentObjects"));

            if (propertyInfo == null)
            {
                throw new ArgumentNullException("ParentObjects");
            }
            var parentObjects = (propertyInfo.GetValue(valueTargetProvider) as IEnumerable <object>).ToList();

            BindableTree = parentObjects.Cast <BindableObject>();

            if (rootObjectProvider == null && valueTargetProvider == null)
            {
                throw new ArgumentException("serviceProvider does not provide an IRootObjectProvider or SimpleValueTargetProvider");
            }
            if (rootObjectProvider == null)
            {
                var parentObject = parentObjects.FirstOrDefault(pO => pO.GetType().GetTypeInfo().IsSubclassOf(typeof(Page)));

                Bindable   = (BindableObject)parentObjects.FirstOrDefault();
                rootObject = parentObject ?? throw new ArgumentNullException("parentObject");
            }
            else
            {
                rootObject = rootObjectProvider.RootObject;
                Bindable   = (BindableObject)valueTargetProvider.TargetObject;
            }

            SetRaiseCanExecuteChangedInternal(Bindable, RaiseCanExecuteChanged);

            if (rootObject is Page page)
            {
                Page = Page ?? page; // allow the user's defined page to take precedence
            }
        }
예제 #27
0
        /// <summary>
        /// Returns an object that is provided as the value of the target property for this markup extension.
        /// </summary>
        /// <param name="serviceProvider">A service provider helper that can provide services for the markup extension.</param>
        /// <returns>The object value to set on the property where the extension is applied.</returns>
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (serviceProvider != null)
            {
                Type type = Type;

                if (Designer.DesignMode)
                {
                    IRootObjectProvider provider = serviceProvider.GetService <IRootObjectProvider>();

                    if (provider != null && provider.RootObject is DependencyObject element)
                    {
                        Designer.SetDesignType(element, type);
                    }
                }

                return(type?.FullName);
            }

            return(this);
        }
예제 #28
0
        internal static object GetRootTemplatedActivity(IServiceProvider serviceProvider)
        {
            // For now, we only support references to the root Activity when we're inside an Activity.Body
            // Note that in the case of nested activity bodies, this gives us the outer activity
            IRootObjectProvider rootProvider =
                serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;

            if (rootProvider == null)
            {
                return(null);
            }
            IAmbientProvider ambientProvider =
                serviceProvider.GetService(typeof(IAmbientProvider)) as IAmbientProvider;

            if (ambientProvider == null)
            {
                return(null);
            }
            IXamlSchemaContextProvider schemaContextProvider =
                serviceProvider.GetService(typeof(IXamlSchemaContextProvider)) as IXamlSchemaContextProvider;

            if (schemaContextProvider == null)
            {
                return(null);
            }
            XamlMember activityBody        = GetXamlMember(schemaContextProvider.SchemaContext, typeof(Activity), "Implementation");
            XamlMember dynamicActivityBody = GetXamlMember(schemaContextProvider.SchemaContext, typeof(DynamicActivity), "Implementation");

            if (activityBody == null || dynamicActivityBody == null)
            {
                return(null);
            }
            if (ambientProvider.GetFirstAmbientValue(null, activityBody, dynamicActivityBody) == null)
            {
                return(null);
            }
            object rootActivity = rootProvider.RootObject as Activity;

            return(rootActivity);
        }
예제 #29
0
        private static object RetrieveDataContext(DependencyObject target, IRootObjectProvider rootProvider)
        {
            object dataContext = target.GetValue(FrameworkElement.DataContextProperty)
                                 ?? target.GetValue(FrameworkContentElement.DataContextProperty);

            if (dataContext == null)
            {
                var root = rootProvider.RootObject as DependencyObject;
                if (root != null)
                {
                    dataContext = root.GetValue(FrameworkElement.DataContextProperty)
                                  ?? root.GetValue(FrameworkContentElement.DataContextProperty);

                    if (dataContext == null)
                    {
                        throw new InvalidOperationException("DataContext could not be found.");
                    }
                }
            }

            return(dataContext);
        }
        /// <summary>Converts the specified string to a new <see cref="T:System.Delegate" /> for the event handler.</summary>
        /// <param name="typeDescriptorContext">An <see cref="T:System.ComponentModel.ITypeDescriptorContext" /> that provides a format context. </param>
        /// <param name="cultureInfo">The <see cref="T:System.Globalization.CultureInfo" /> to use as the current culture. </param>
        /// <param name="source">The source string to convert.</param>
        /// <returns>A new <see cref="T:System.Delegate" /> that represents the referenced event handler.</returns>
        /// <exception cref="T:System.NotSupportedException">The necessary services are not available.-or-Could not perform the specific conversion.</exception>
        /// <exception cref="T:System.ArgumentNullException">
        ///         <paramref name="typeDescriptorContext" /> or <paramref name="source" /> are <see langword="null" />.</exception>
        // Token: 0x06001D03 RID: 7427 RVA: 0x00087740 File Offset: 0x00085940
        public override object ConvertFrom(ITypeDescriptorContext typeDescriptorContext, CultureInfo cultureInfo, object source)
        {
            if (typeDescriptorContext == null)
            {
                throw new ArgumentNullException("typeDescriptorContext");
            }
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (EventSetterHandlerConverter.s_ServiceProviderContextType == null)
            {
                Assembly assembly = typeof(IRootObjectProvider).Assembly;
                EventSetterHandlerConverter.s_ServiceProviderContextType = assembly.GetType("MS.Internal.Xaml.ServiceProviderContext");
            }
            if (typeDescriptorContext.GetType() != EventSetterHandlerConverter.s_ServiceProviderContextType)
            {
                throw new ArgumentException(SR.Get("TextRange_InvalidParameterValue"), "typeDescriptorContext");
            }
            IRootObjectProvider rootObjectProvider = typeDescriptorContext.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;

            if (rootObjectProvider != null && source is string)
            {
                IProvideValueTarget provideValueTarget = typeDescriptorContext.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
                if (provideValueTarget != null)
                {
                    EventSetter eventSetter = provideValueTarget.TargetObject as EventSetter;
                    string      text;
                    if (eventSetter != null && (text = (source as string)) != null)
                    {
                        text = text.Trim();
                        return(Delegate.CreateDelegate(eventSetter.Event.HandlerType, rootObjectProvider.RootObject, text));
                    }
                }
            }
            throw base.GetConvertFromException(source);
        }
예제 #31
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            try
            {
                IRootObjectProvider service  = serviceProvider.GetService(typeof(IRootObjectProvider)) as IRootObjectProvider;
                var             locAttribute = (LocalizationAttribute)Attribute.GetCustomAttribute(service.RootObject.GetType(), typeof(LocalizationAttribute));
                ResourceManager resman       = new ResourceManager(locAttribute.ResourceClassPath, service.RootObject.GetType().Assembly);

                if (resman.GetString(Key) != null)
                {
                    return(resman.GetString(Key));
                }
                else
                {
                    GuiLogMessageOccured(string.Format(Resources.Can_t_find_localization_key, Key, service.RootObject.GetType()), NotificationLevel.Warning);
                    return(Key);
                }
            }
            catch (Exception ex)
            {
                GuiLogMessageOccured(string.Format(Resources.Error_trying_to_lookup_localization_key, Key, ex.Message), NotificationLevel.Warning);
                return(Key);
            }
        }