{
Func<object> getConverter = () =>
{
- MemberInfo memberInfo;
+ string converterTypeName = null;
+ Type realType = toType;
+
+ if (true == realType.IsGenericType && typeof(Nullable<>) == realType.GetGenericTypeDefinition())
+ {
+ realType = realType.GetGenericArguments()[0];
+ }
+
+ converterTypeName = realType.CustomAttributes.GetTypeConverterTypeName();
- var converterTypeName = toType.GetTypeInfo().CustomAttributes.GetTypeConverterTypeName();
- if (minfoRetriever != null && (memberInfo = minfoRetriever()) != null)
- converterTypeName = memberInfo.CustomAttributes.GetTypeConverterTypeName() ?? converterTypeName;
if (converterTypeName == null)
- return null;
+ {
+ converterTypeName = toType.FullName + "TypeConverter";
+ }
var convertertype = Type.GetType(converterTypeName);
- return Activator.CreateInstance(convertertype);
+
+ if (null == convertertype)
+ {
+ return null;
+ }
+ else
+ {
+ return Activator.CreateInstance(convertertype);
+ }
};
return ConvertTo(value, toType, getConverter, serviceProvider);
throw new XamlParseException(string.Format("Can't find type {0}", type.FullName), new XmlLineInfo());
}
}
+ else
+ {
+ Assembly assembly = type.Assembly;
+
+ Stream stream = null;
+
+ foreach (string str in assembly.GetManifestResourceNames())
+ {
+ string resourceClassName = str.Substring(0, str.LastIndexOf('.'));
+ int index = resourceClassName.LastIndexOf('.');
+ if (0 <= index && index < resourceClassName.Length)
+ {
+ resourceClassName = resourceClassName.Substring(index + 1);
+
+ if (resourceClassName == type.Name)
+ {
+ stream = assembly.GetManifestResourceStream(str);
+ break;
+ }
+ }
+ }
+
+ if (null == stream)
+ {
+ throw new XamlParseException(string.Format("Can't find type {0} in embedded resource", type.FullName), new XmlLineInfo());
+ }
+ else
+ {
+ Byte[] buffer = new byte[stream.Length];
+ stream.Read(buffer, 0, (int)stream.Length);
+
+ string ret = System.Text.Encoding.Default.GetString(buffer);
+ return ret;
+ }
+ }
return null;
}
Type type = null;
foreach (var asm in lookupAssemblies) {
foreach (var name in lookupNames)
+ {
if ((type = Type.GetType($"{asm.ClrNamespace}.{name}, {asm.AssemblyName}")) != null)
break;
+
+ if ('?' == name.Last())
+ {
+ string nameOfNotNull = name.Substring(0, name.Length - 1);
+ Type typeofNotNull = Type.GetType($"{asm.ClrNamespace}.{nameOfNotNull}, {asm.AssemblyName}");
+
+ if (null != typeofNotNull)
+ {
+ type = typeof(Nullable<>).MakeGenericType(new Type[] { typeofNotNull });
+ break;
+ }
+ }
+ }
+
if (type != null)
break;
}
int z = (int)GraphicsTypeManager.Instance.ConvertScriptToPixel(parts[2].Trim());
return new Position(x, y, z);
}
+ else if (parts.Length == 2)
+ {
+ int x = (int)GraphicsTypeManager.Instance.ConvertScriptToPixel(parts[0].Trim());
+ int y = (int)GraphicsTypeManager.Instance.ConvertScriptToPixel(parts[1].Trim());
+ return new Position(x, y);
+ }
}
throw new InvalidOperationException($"Cannot convert \"{value}\" into {typeof(Position)}");