//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) //{ //} }
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)); }
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); }
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); } }
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; }
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); }
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; }
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; }