//public string LayerToXaml(Layer layer)
        //{
        //    if (layer == null)
        //        return null;
        //    StringBuilder xaml = new StringBuilder();
        //    writer = XmlWriter.Create(xaml, writerSettings);
        //    writer.WriteStartElement("FeatureLayer");
        //    WriteNamespaces();
        //    WriteLayer(layer);
        //    writer.WriteEndElement();
        //    writer.Flush();
        //    writer = null;
        //    string result = xaml.ToString();
        //    int pos = result.IndexOf("<esri:FeatureLayer");
        //    if (pos > -1)
        //    {
        //        result = result.Substring(pos);
        //    }
        //    pos = result.LastIndexOf("</esri:FeatureLayer");
        //    if (pos > -1)
        //    {
        //        result = result.Substring(0, pos + 20);
        //    }
        //    return result;
        //}
        private void WriteResources(Dictionary <string, ResourceDictionaryEntry> dic)
        {
            foreach (string key in dic.Keys)
            {
                ResourceDictionaryEntry o = dic[key];
                if (o == null)
                {
                    continue;
                }
                IValueConverter valueConverter = o.Resource as IValueConverter;
                if (valueConverter != null)
                {
                    Type type = valueConverter.GetType();
                    writer.WriteStartElement(type.Name, Namespaces[o.Namespace]);
                    WriteXName(key);
                    writer.WriteEndElement();
                }
                else
                {
                    Write(o);
                    WriteXName(key);
                }
            }

            //foreach (KeyValuePair<object, object> pair in dic)
            //{

            //}
        }
Esempio n. 2
0
        private void LogBindingException(object value, Type targetType, Exception ex)
        {
            string valueInfo     = (value == null ? "(null)" : string.Format("{0} ({1})", value, value.GetType().Name));
            string targetInfo    = targetType.Name;
            string converterInfo = (converter == null ? "(none)" : converter.GetType().Name);

            Debug.LogError(string.Format("Binding failed. Value: {0}, Target Type: {1}, Converter: {2}, Error: {3}", valueInfo, targetInfo, converterInfo, ex.Message));
        }
Esempio n. 3
0
        public (Type SourceType, Type TargetType, Type ParameterType) GetConverterTypes(IValueConverter converter)
        {
            var att = converter.GetType().GetCustomAttribute <ValueConversionAttribute>(true, false, false);

            if (att != null)
            {
                return(att.SourceType, att.TargetType, att.ParameterType);
            }
            if (converter.GetType().IsSubclassOfRawGeneric(typeof(GenericConverter <,>)))
            {
                var args = converter.GetType().GetSubclassOfRawGeneric(typeof(GenericConverter <,>)).GetGenericArguments();
                return(args[0], args[1], null);
            }
            if (converter.GetType().IsSubclassOfRawGeneric(typeof(GenericConverter <, ,>)))
            {
                var args = converter.GetType().GetSubclassOfRawGeneric(typeof(GenericConverter <, ,>)).GetGenericArguments();
                return(args[0], args[1], args[2]);
            }
            return(null, null, null);
        }
Esempio n. 4
0
 private static ConverterTypeAttribute getAttributeForConverter(IValueConverter converter)
 {
     object[] attributes = converter.GetType().GetCustomAttributes(true);
     try
     {
         return(attributes.First(attr => (attr is ConverterTypeAttribute)) as ConverterTypeAttribute);
     }
     catch
     {
         return(null);
     }
 }
Esempio n. 5
0
        public ConverterDescriptor(IValueConverter converter)
        {
            var attribute = (ValueConversionAttribute)converter.GetType().GetCustomAttributes(typeof(ValueConversionAttribute), true).SingleOrDefault();

            if (attribute == null)
            {
                throw new Exception("Converter must have a ValueConverterAttribute to be wrapped in a descriptor");
            }

            TargetType = attribute.TargetType;
            SourceType = attribute.SourceType;
            Converter  = converter;
        }
        public override object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (parameter is MultiConverterArrayParameter multiConverterArrayParameter)
            {
                object value = null;

                for (int i = 0; i < values.Length; i++)
                {
                    value = values[i];

                    foreach (IValueConverter converter in multiConverterArrayParameter.Converters)

                        value = converter.Convert(value, ((ValueConversionAttribute)converter.GetType().GetCustomAttributes(typeof(ValueConversionAttribute), true).FirstOrDefault())?.TargetType ?? typeof(object), multiConverterArrayParameter.Parameter, culture);

                    values[i] = value;
                }

                value = multiConverterArrayParameter.Converter.Convert(values, ((MultiValueConversionAttribute)multiConverterArrayParameter.Converter.GetType().GetCustomAttributes(typeof(MultiValueConversionAttribute), true).FirstOrDefault())?.TargetType ?? typeof(object), multiConverterArrayParameter.Parameter, culture);

                return value;
            }

            if (parameter is MultiConverterArrayMultiParametersParameter multiConverterArrayMultiParametersParameter)
            {
                IValueConverter converter = null;

                object value;

                for (int i = 0; i < values.Length; i++)
                {
                    value = values[i];

                    for (int j = 0; j < multiConverterArrayMultiParametersParameter.Converters.Count; j++)
                    {
                        converter = multiConverterArrayMultiParametersParameter.Converters[j];

                        value = converter.Convert(value, ((ValueConversionAttribute)converter.GetType().GetCustomAttributes(typeof(ValueConversionAttribute), true).FirstOrDefault())?.TargetType ?? typeof(object), multiConverterArrayMultiParametersParameter.Parameters[j], culture);
                    }

                    values[i] = value;
                }

                value = multiConverterArrayMultiParametersParameter.Converter.Convert(values, ((MultiValueConversionAttribute)converter.GetType().GetCustomAttributes(typeof(MultiValueConversionAttribute), true).FirstOrDefault())?.TargetType ?? typeof(object), multiConverterArrayMultiParametersParameter.Parameter, culture);

                return value;
            }

            return null;
        }
Esempio n. 7
0
        private object BackwardConverterCall(IValueConverter _converter, object _value, object _parameter, CultureInfo _culture)
        {
            if (_converter == null)
            {
                return(null);
            }

            object[] attribs = _converter.GetType().GetCustomAttributes(typeof(ValueConversionAttribute), false);
            if (attribs != null && attribs.Length == 1)
            {
                ValueConversionAttribute vca = attribs[0] as ValueConversionAttribute;
                if (vca != null)
                {
                    Type currentSourceType = vca.SourceType;
                    return(_converter.ConvertBack(_value, currentSourceType, _parameter, _culture));
                }
            }

            return(null);
        }
Esempio n. 8
0
        public static void RegisterConverter(IValueConverter converter, string name = null)
        {
            if (RegisteredConverters.ContainsValue(converter))
            {
                return;
            }

            if (name == null)
            {
                name = converter.GetType().Name.Replace("Converter", string.Empty);
            }

            int count = 1;
            var key = name;
            while (RegisteredConverters.ContainsKey(key))
            {
                key = string.Format("{0}_{1}", name, count);
                count++;
            }

            RegisteredConverters.Add(key, converter);
        }
        public override object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            if (parameter is MultiConverterArrayParameter multiConverterArrayParameter)
            {
                Type[] types
#if !WinCopies3
                    = ((MultiValueConversionAttribute)multiConverterArrayParameter.Converter.GetType().GetCustomAttributes(typeof(MultiValueConversionAttribute), true).FirstOrDefault())?.SourceTypes;

                if (types == null)
                {
#else
                    ;
#endif
                    types = new Type[targetTypes.Length];

                    for (int i = 0; i < targetTypes.Length; i++)

                        types[i] = typeof(object);
#if !WinCopies3
              }
#endif

                object[] values = multiConverterArrayParameter.Converter.ConvertBack(value, types, multiConverterArrayParameter.Parameter, culture);

                for (int i = 0; i < values.Length; i++)
                {
                    value = values[i];

                    foreach (IValueConverter converter in multiConverterArrayParameter.Converters)

                        value = converter.ConvertBack(value, ((ValueConversionAttribute)converter.GetType().GetCustomAttributes(typeof(ValueConversionAttribute), true).FirstOrDefault())?.TargetType ?? typeof(object), multiConverterArrayParameter.Parameter, culture);

                    values[i] = value;
                }

                return values;
            }

            if (parameter is MultiConverterArrayMultiParametersParameter multiConverterArrayMultiParametersParameter)
            {
                Type[] types
#if !WinCopies3
                    = ((MultiValueConversionAttribute)multiConverterArrayMultiParametersParameter.Converter.GetType().GetCustomAttributes(typeof(MultiValueConversionAttribute), true).FirstOrDefault())?.SourceTypes;

                if (types == null)
                {
#else
                    ;
#endif
                    types = new Type[targetTypes.Length];

                    for (int i = 0; i < targetTypes.Length; i++)

                        types[i] = typeof(object);
#if !WinCopies3
                }
#endif

                object[] values = multiConverterArrayMultiParametersParameter.Converter.ConvertBack(value, types, multiConverterArrayMultiParametersParameter.Parameter, culture);

                for (int i = 0; i < values.Length; i++)
                {
                    value = values[i];

                    for (int j = 0; j < multiConverterArrayMultiParametersParameter.Converters.Count; j++)
                    {
                        IValueConverter converter = multiConverterArrayMultiParametersParameter.Converters[j];

                        value = converter.ConvertBack(value, ((ValueConversionAttribute)converter.GetType().GetCustomAttributes(typeof(ValueConversionAttribute), true).FirstOrDefault())?.TargetType ?? typeof(object), multiConverterArrayMultiParametersParameter.Parameters[j], culture);
                    }

                    values[i] = value;
                }

                return values;
            }

            return null;
        }
        private object ConvertHelper(IValueConverter converter, object value, Type targetType, object parameter, CultureInfo culture)
        {
            // use the StringFormat (if appropriate) in preference to the default converter
            string stringFormat = EffectiveStringFormat;
            Invariant.Assert(converter != null || stringFormat != null);

            // PreSharp uses message numbers that the C# compiler doesn't know about.
            // Disable the C# complaints, per the PreSharp documentation.
            #pragma warning disable 1634, 1691

            // PreSharp complains about catching NullReference (and other) exceptions.
            // It doesn't recognize that IsCritical[Application]Exception() handles these correctly.
            #pragma warning disable 56500

            object convertedValue = null;
            try
            {
                if (stringFormat != null)
                {
                    convertedValue = String.Format(culture, stringFormat, value);
                }
                else
                {
                    convertedValue = converter.Convert(value, targetType, parameter, culture);
                }
            }

            // Catch all exceptions.  There is no app code on the stack,
            // so the exception isn't actionable by the app.
            // Yet we don't want to crash the app.
            catch (Exception ex)
            {
                // the DefaultValueConverter can end up calling BaseUriHelper.GetBaseUri()
                // which can raise SecurityException if the app does not have the right FileIO privileges
                if (CriticalExceptions.IsCriticalApplicationException(ex))
                    throw;

                if (TraceData.IsEnabled)
                {
                    string name = String.IsNullOrEmpty(stringFormat) ? converter.GetType().Name : "StringFormat";
                    TraceData.Trace(TraceLevel,
                            TraceData.BadConverterForTransfer(
                                name,
                                AvTrace.ToStringHelper(value),
                                AvTrace.TypeName(value)),
                            this, ex);
                }
                convertedValue = DependencyProperty.UnsetValue;
            }
            catch // non CLS compliant exception
            {
                if (TraceData.IsEnabled)
                {
                    TraceData.Trace(TraceLevel,
                            TraceData.BadConverterForTransfer(
                                converter.GetType().Name,
                                AvTrace.ToStringHelper(value),
                                AvTrace.TypeName(value)),
                            this);
                }
                convertedValue = DependencyProperty.UnsetValue;
            }

            #pragma warning restore 56500
            #pragma warning restore 1634, 1691

            return convertedValue;
        }
Esempio n. 11
0
        public ConverterDescriptor(IValueConverter converter)
        {
            var attribute = (ValueConversionAttribute)converter.GetType().GetCustomAttributes(typeof(ValueConversionAttribute), true).SingleOrDefault();
            if (attribute == null)
                throw new Exception("Converter must have a ValueConverterAttribute to be wrapped in a descriptor");

            TargetType = attribute.TargetType;
            SourceType = attribute.SourceType;
            Converter = converter;
        }