public HierarchicalComponentContainerElement(HierarchicalComponentContainer <TContainer, TComponent> container, T component, bool optional) { this.AddStyleSheetAndVariant(ClassNames.BaseClassName); m_Container = container; m_IsOptional = optional; AddToClassList(ClassNames.BaseClassName); var componentContainerName = component.GetType().Name; var foldout = new Foldout { text = ObjectNames.NicifyVariableName(componentContainerName) }; foldout.AddToClassList(ClassNames.Component); foldout.AddToClassList(componentContainerName); Add(foldout); var toggle = foldout.Q <Toggle>(); toggle.AddToClassList(ClassNames.Header); m_AddButton = new Button(AddComponent); m_AddButton.AddToClassList(ClassNames.AddComponent); toggle.Add(m_AddButton); m_RemoveButton = new Button(RemoveComponent); m_RemoveButton.AddToClassList(ClassNames.RemoveComponent); toggle.Add(m_RemoveButton); m_Element = new PropertyElement(); m_Element.OnChanged += ElementOnOnChanged; m_Element.SetTarget(component); foldout.contentContainer.Add(m_Element); foldout.contentContainer.AddToClassList(ClassNames.Fields); m_MissingComponentLabel = new Label($"Component of type {typeof(T).Name} is missing"); m_MissingComponentLabel.style.display = DisplayStyle.None; foldout.contentContainer.Add(m_MissingComponentLabel); SetStyle(); }