public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            IXamlNameResolver service = (IXamlNameResolver)context.GetService(typeof(IXamlNameResolver));

            if (service == null)
            {
                throw new InvalidOperationException(System.Xaml.SR.Get("MissingNameResolver"));
            }
            string str = value as string;

            if (string.IsNullOrEmpty(str))
            {
                throw new InvalidOperationException(System.Xaml.SR.Get("MustHaveName"));
            }
            object fixupToken = service.Resolve(str);

            if (fixupToken == null)
            {
                string[] names = new string[] { str };
                fixupToken = service.GetFixupToken(names, true);
            }
            return(fixupToken);
        }
예제 #2
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException("serviceProvider");
            }
            IXamlNameResolver nameResolver = serviceProvider.GetService(typeof(IXamlNameResolver)) as IXamlNameResolver;

            if (nameResolver == null)
            {
                throw new InvalidOperationException(SR.Get(SRID.MissingNameResolver));
            }
            if (String.IsNullOrEmpty(Name))
            {
                throw new InvalidOperationException(SR.Get(SRID.MustHaveName));
            }
            object obj = nameResolver.Resolve(Name);

            if (obj == null)
            {
                string[] names = new string[] { Name };
                obj = nameResolver.GetFixupToken(names, true);
            }
            return(obj);
        }
예제 #3
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException("serviceProvider");
            }
            IXamlNameResolver service = serviceProvider.GetService(typeof(IXamlNameResolver)) as IXamlNameResolver;

            if (service == null)
            {
                throw new InvalidOperationException(System.Xaml.SR.Get("MissingNameResolver"));
            }
            if (string.IsNullOrEmpty(this.Name))
            {
                throw new InvalidOperationException(System.Xaml.SR.Get("MustHaveName"));
            }
            object fixupToken = service.Resolve(this.Name);

            if (fixupToken == null)
            {
                string[] names = new string[] { this.Name };
                fixupToken = service.GetFixupToken(names, true);
            }
            return(fixupToken);
        }
예제 #4
0
        static public Dictionary <string, Double> GetNameValueTable(IXamlNameResolver nameResolver,
                                                                    string expression, out List <string> unknownNames)
        {
            unknownNames = new List <string>();

            var allNames       = new List <string>();
            var nameValueTable = new Dictionary <string, Double>();

            var scanner = new MathExpressionScanner(expression);

            foreach (MathExpressionToken scannerTok in scanner.Scan())
            {
                switch (scannerTok.TokenType)
                {
                case MathTokenType.Name:
                    if (!allNames.Contains(scannerTok.Name))
                    {
                        allNames.Add(scannerTok.Name);
                    }
                    break;
                }
            }

            foreach (string name in allNames)
            {
                bool   isFullyInit;
                object obj = nameResolver.Resolve(name, out isFullyInit);
                if (obj == null)
                {
                    if (nameResolver.IsFixupTokenAvailable)
                    {
                        unknownNames.Add(name);
                    }
                    else
                    {
                        throw new InvalidOperationException("Could not resolve name {0}");
                    }
                }
                else if (!isFullyInit)
                {
                    throw new InvalidOperationException(String.Format("Name {0} is not fully initialized", name));
                }
                else
                {
                    var num = obj as Number;
                    if (num == null)
                    {
                        throw new InvalidOperationException(String.Format("The Name {0} is of type {1} does not resolve to a Number", name, obj.GetType()));
                    }
                    nameValueTable.Add(name, num.Value);
                }
            }
            if (unknownNames.Count == 0)
            {
                unknownNames = null;
            }

            return(nameValueTable);
        }
예제 #5
0
        void SetupNameTableProvider(IServiceProvider serviceProvider)
        {
            IXamlNameResolver serializerContext = (IXamlNameResolver)serviceProvider.GetService(typeof(IXamlNameResolver));

            if (serializerContext != null)
            {
                this.tableProvider = () => serializerContext;
            }
            else
            {
                this.tableProvider = () => null;
            }
        }
예제 #6
0
        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            if (serviceProvider == null)
            {
                throw new ArgumentNullException("serviceProvider");
            }

            // the bellow method do not work when no Application has been created

            /*
             * object[] references = (from window in Application.Current.Windows.Cast<Window>()
             *                               let name = window.FindName(Name)
             *                               where name != null
             *                               select name)
             *                               .ToArray();
             *
             * if (references.Length == 0)
             *  throw new InvalidOperationException(string.Format("Impossible to find reference for name '{0}'", Name));
             *
             * if (references.Length > 1)
             * {
             *  StringBuilder message = new StringBuilder();
             *  message.AppendLine(string.Format("There are {0} references for name '{1}'.", references.Length, Name));
             *  foreach (object reference in references)
             *      message.AppendLine(string.Format("  reference: '{0}' ({1})", reference, reference.GetType().FullName));
             *  throw new InvalidOperationException(message.ToString());
             * }
             *
             * return references[0];
             */

            IXamlNameResolver service = serviceProvider.GetService(typeof(IXamlNameResolver)) as IXamlNameResolver;

            if (service == null)
            {
                return(null); // happens in design mode
            }
            if (string.IsNullOrWhiteSpace(Name))
            {
                throw new InvalidOperationException("Reference markup extension must be provided a name.");
            }

            object fixupToken = service.Resolve(Name);

            if (fixupToken == null)
            {
                fixupToken = service.GetFixupToken(new [] { Name }, true);
            }

            return(fixupToken);
        }
예제 #7
0
        public static SymbolResolver EnvironmentFromNameTable(IXamlNameResolver table, SymbolResolver parent)
        {
            SymbolResolver environment = parent ?? new SymbolResolver();

            if (table == null)
            {
                return(environment);
            }

            foreach (KeyValuePair <string, object> pair in table.GetAllNamesAndValuesInScope())
            {
                environment.Add(pair);
            }

            return(environment);
        }
        public static SymbolResolver EnvironmentFromNameTable(IXamlNameResolver table, SymbolResolver parent)
        {
            SymbolResolver environment = parent ?? new SymbolResolver();

            if (table == null)
            {
                return environment;
            }

            foreach (KeyValuePair<string, object> pair in table.GetAllNamesAndValuesInScope())
            {
                environment.Add(pair);
            }

            return environment;
        }
예제 #9
0
파일: TestTemplate.cs 프로젝트: ay2015/wpf
 public void Handler(object sender, EventArgs e)
 {
     Resolver = (IXamlNameResolver)sender;
 }