Hi, I’m trying to add child element to UXML to allow user to modify child elements directly in UIBuilder.
I’m right now I’m using this:
[Preserve]
public new class UxmlFactory : UxmlFactory<TestParent, UxmlTraits>
{
public override VisualElement Create(IUxmlAttributes bag, CreationContext cc)
{
var created = base.Create(bag, cc);
if (created is TestParent target)
{
var testChild= target.Q<TestChild>();
if(testChild == null)
{
var visualTree = Resources.Load<VisualTreeAsset>(nameof(TestChild));
visualTree.CloneTree(target);
testChild= target.Q<TestChild>();
testChild.style.display = new StyleEnum<DisplayStyle>(DisplayStyle.Flex);
testChild.style.position = new StyleEnum<Position>(Position.Absolute);
testChild.style.height = new StyleLength(new Length(100, LengthUnit.Pixel));
testChild.style.width = new StyleLength(new Length(100, LengthUnit.Pixel));
testChild.image = new Texture2D(100, 100);
target.SetTestChild(testChild);
target.RegisterCallback<GeometryChangedEvent>(OnAttached);
}
return created;
}
return null;
}
private void OnAttached(GeometryChangedEvent geometryChangedEvent)
{
if (geometryChangedEvent.target is TestParent testParent)
{
testParent.UnregisterCallback<GeometryChangedEvent>(OnAttached);
testParent.PlaceTestChildAtCenter();
}
}
}
But in my case TestChild adds to TestParent in heirarchy but it’s disabled and in uxml I have only:
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
<TestParent/>
</ui:UXML>
But I want to add to be like this:
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
<TestParent>
<TestChild/>
</TestParent>
</ui:UXML>
Here code on TestChild:
public class TestChild : Image
{
[Preserve]
public new class UxmlFactory : UxmlFactory<TestChild, UxmlTraits>
{
}
public new class UxmlTraits : VisualElement.UxmlTraits
{
}
}
Do you have any suggestions about what I can to do?