Simply traying to create a custom visual element that could show/hide only one of it's child by setting an enum attribute in inspector, however the whole states reset after saving the UI builder which is using this UI element with two child, what am I doing wrong?
public class VpWidgetMainSidebarVisualElement : VisualElement
{
private SidebarContentEnum _sidebarContent;
public SidebarContentEnum SidebarContent
{
get => _sidebarContent;
set => SetSidebarContent(value);
}
public VpWidgetMainSidebarVisualElement()
{
UpdateSidebarContentVisibility();
}
private void SetSidebarContent(SidebarContentEnum value)
{
_sidebarContent = value;
UpdateSidebarContentVisibility();
}
private void UpdateSidebarContentVisibility()
{
if (this.childCount > 0)
{
var i = 0;
foreach (var ve in this.Children())
{
ve.style.display = new StyleEnum<DisplayStyle>(i == (int)_sidebarContent ? DisplayStyle.Flex : DisplayStyle.None);
ve.MarkDirtyRepaint();
i++;
}
}
}
[Preserve]
public new class UxmlFactory : UxmlFactory<VpWidgetMainSidebarVisualElement, UxmlTraits>
{
}
[Preserve]
public new class UxmlTraits : VisualElement.UxmlTraits
{
private UxmlEnumAttributeDescription<SidebarContentEnum> _sidebarContent = new() { name = "sidebar-content", defaultValue = SidebarContentEnum.BrowsProduct };
public override IEnumerable<UxmlChildElementDescription> uxmlChildElementsDescription
{
get
{
yield break;
}
}
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc)
{
base.Init(ve, bag, cc);
var widget = (VpWidgetMainSidebarVisualElement)ve;
widget.SetSidebarContent(_sidebarContent.GetValueFromBag(bag, cc));
}
}
public enum SidebarContentEnum
{
BrowsProduct,
ProductDetails
}
}