private ParameterExpression DeserializeParameter(XElement el)
        {
            var name = el.Attribute("name").Value;
            var type = el.Attribute("type").Value;

            var parameterOnStack = _lambdaParameterStack.FirstOrDefault(p => p.Name == name);

            return(parameterOnStack ?? Expression.Parameter(KnownTypes.FindType(type), name));
        }
        private static void ResetProperties(object rootElement, string targetId, string propertyList)
        {
            var frameworkElement = rootElement as Element;

            if (frameworkElement == null)
            {
                return;
            }

            InitialPropertyList[targetId] = propertyList;

            foreach (var property in propertyList.Split(','))
            {
                var split = property.Split('|');

                if (split.Length != 2)
                {
                    continue;
                }

                var typePart     = split[0];
                var propertyPart = split[1];
                var lastDot      = propertyPart.LastIndexOf('.');

                if (lastDot != -1)
                {
                    var propertyOwner     = propertyPart.Substring(0, lastDot);
                    var propertyName      = propertyPart.Substring(lastDot + 1);
                    var propertyOwnerType = KnownTypes.FindType(propertyOwner);

                    if (typePart == "DependencyProperty")
                    {
                        var dpField = propertyOwnerType.GetTypeInfo().DeclaredFields.FirstOrDefault(fi => fi.Name == propertyName && fi.IsStatic && fi.IsPublic);
                        if (dpField == null)
                        {
                            Debug.WriteLine("Dependency property " + propertyName + " not found on type " + propertyOwnerType.FullName);
                            continue;
                        }

                        var dp = (BindableProperty)dpField.GetValue(null);
                        frameworkElement.ClearValue(dp);
                    }
                    else if (typePart == "Property")
                    {
                        Debug.WriteLine("Resetting CLR properties not implented yet (" + propertyName + " at " + propertyOwnerType.FullName + ")");
                    }
                    else if (typePart == "Event")
                    {
                        Debug.WriteLine("Resetting CLR events not implented yet (" + propertyName + " at " + propertyOwnerType.FullName + ")");
                    }
                }
            }
        }
        private Type DeserializeTypeInfo(XElement el)
        {
            var typename = el.Attribute("typename").Value;
            var isArray  = el.Attribute("isarray").Value == bool.TrueString;

            var genericArgs = el.Elements().Select(DeserializeTypeInfo).ToArray();

            if (genericArgs.Length > 0)
            {
                // Remove <T, ...> at the end
                typename = Regex.Replace(typename, @"<(\w|\s|,)+>$", "");
                var type = KnownTypes.FindType(typename + "`" + genericArgs.Length);
                return(type.MakeGenericType(genericArgs));
            }

            var resultType = KnownTypes.FindType(typename);

            if (!isArray)
            {
                return(resultType);
            }
            return
                (resultType.MakeArrayType());
        }
Beispiel #4
0
        private static void ResetProperties(object rootElement, string targetId, string propertyList)
        {
            var frameworkElement = rootElement as FrameworkElement;

            if (frameworkElement == null)
            {
                return;
            }

            InitialPropertyList.TryAdd(targetId, propertyList);

            foreach (var property in propertyList.Split(','))
            {
                var split = property.Split('|');

                if (split.Length != 2)
                {
                    continue;
                }

                var typePart     = split[0];
                var propertyPart = split[1];
                var lastDot      = propertyPart.LastIndexOf('.');

                if (lastDot != -1)
                {
                    var propertyOwner = propertyPart.Substring(0, lastDot);
                    var propertyName  = propertyPart.Substring(lastDot + 1);

                    var propertyOwnerType = KnownTypes.FindType(propertyOwner, rootElement);

                    if (typePart == "DependencyProperty")
                    {
                        var dpField = propertyOwnerType.GetField(propertyName, BindingFlags.Static | BindingFlags.Public);
                        if (dpField == null)
                        {
                            Debug.WriteLine("Dependency property " + propertyName + " not found on type " + propertyOwnerType.FullName);
                            continue;
                        }

                        var dp = (DependencyProperty)dpField.GetValue(null);
                        frameworkElement.ClearValue(dp);
                    }
                    else if (typePart == "RoutedEvent")
                    {
                        var reField = propertyOwnerType.GetField(propertyName, BindingFlags.Static | BindingFlags.Public);
                        if (reField == null)
                        {
                            Debug.WriteLine("Routed event " + propertyName + " not found on type " + propertyOwnerType.FullName);
                            continue;
                        }

                        var re = (DependencyProperty)reField.GetValue(null);
                        frameworkElement.ClearValue(re);
                    }
                    else if (typePart == "Property")
                    {
                        Debug.WriteLine("Resetting CLR properties not implented yet (" + propertyName + " at " + propertyOwnerType.FullName + ")");
                    }
                    else if (typePart == "Event")
                    {
                        Debug.WriteLine("Resetting CLR events not implented yet (" + propertyName + " at " + propertyOwnerType.FullName + ")");
                    }
                }
                else
                {
                }
            }
        }