Ejemplo n.º 1
0
        public AvaloniaDesigner()
        {
            InitializeComponent();
            BindingOperations.SetBinding(State, TextBox.TextProperty,
                                         new Binding(nameof(ProcessHost.State))
            {
                Source = _host, Mode = BindingMode.OneWay
            });

            _host.PropertyChanged += _host_PropertyChanged;
            _host.MetadataArrived += data => Metadata = data;
        }
Ejemplo n.º 2
0
        AvaloniaDesignerMetadata BuildMetadata(List <Assembly> asms, Type xmlNsAttr)
        {
            var rv = new AvaloniaDesignerMetadata()
            {
                NamespaceAliases = new List <MetadataNamespaceAlias>(),
                Types            = new List <MetadataType>()
            };


            foreach (var asm in asms)
            {
                foreach (dynamic xmlns in asm.GetCustomAttributes().Where(a => a.GetType() == xmlNsAttr))
                {
                    rv.NamespaceAliases.Add(new MetadataNamespaceAlias
                    {
                        Namespace    = (string)xmlns.ClrNamespace,
                        XmlNamespace = (string)xmlns.XmlNamespace
                    });
                }

                try
                {
                    foreach (var type in asm.GetTypes())
                    {
                        try
                        {
                            if (!type.IsPublic || type.IsAbstract)
                            {
                                continue;
                            }
                            var t = new MetadataType()
                            {
                                Name       = type.Name,
                                Namespace  = type.Namespace,
                                Properties = new List <MetadataProperty>()
                            };
                            rv.Types.Add(t);
                            foreach (var prop in type.GetProperties())
                            {
                                if (prop.GetMethod?.IsPublic != true)
                                {
                                    continue;
                                }
                                var p = new MetadataProperty()
                                {
                                    Name = prop.Name,
                                    Type =
                                        prop.PropertyType == typeof(string) ||
                                        (prop.PropertyType.IsValueType &&
                                         prop.PropertyType.Assembly == typeof(int).Assembly)
                                            ? MetadataPropertyType.BasicType
                                            : prop.PropertyType.IsEnum
                                                ? MetadataPropertyType.Enum
                                                : MetadataPropertyType.MetadataType
                                };
                                if (p.Type == MetadataPropertyType.Enum)
                                {
                                    p.EnumValues = Enum.GetNames(prop.PropertyType);
                                }
                                if (p.Type == MetadataPropertyType.MetadataType)
                                {
                                    p.MetadataFullTypeName = prop.PropertyType.Namespace + "." + prop.PropertyType.Name;
                                }
                                t.Properties.Add(p);
                            }
                        }
                        catch
                        {
                            //
                        }
                    }
                }
                catch
                {
                    //
                }
            }
            return(rv);
        }
Ejemplo n.º 3
0
 public UpdateMetadataMessage(AvaloniaDesignerMetadata metadata)
 {
     Metadata = metadata;
 }