feat: support dynamic form group generation, add demo.
This commit is contained in:
@@ -70,6 +70,7 @@
|
||||
</StackPanel>
|
||||
<ContentPresenter
|
||||
Name="PART_ContentPresenter"
|
||||
ContentTemplate="{TemplateBinding ContentTemplate}"
|
||||
Content="{TemplateBinding Content}" />
|
||||
</StackPanel>
|
||||
</ControlTemplate>
|
||||
@@ -111,6 +112,7 @@
|
||||
Grid.Column="1"
|
||||
VerticalAlignment="Stretch"
|
||||
VerticalContentAlignment="Center"
|
||||
ContentTemplate="{TemplateBinding ContentTemplate}"
|
||||
Content="{TemplateBinding Content}" />
|
||||
</Grid>
|
||||
</ControlTemplate>
|
||||
@@ -120,6 +122,7 @@
|
||||
<Setter Property="Template">
|
||||
<ControlTemplate TargetType="u:FormItem">
|
||||
<ContentPresenter
|
||||
ContentTemplate="{TemplateBinding ContentTemplate}"
|
||||
Content="{TemplateBinding Content}" />
|
||||
</ControlTemplate>
|
||||
</Setter>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.Metadata;
|
||||
using Avalonia.Layout;
|
||||
using Irihi.Avalonia.Shared.Contracts;
|
||||
using Ursa.Common;
|
||||
|
||||
namespace Ursa.Controls;
|
||||
@@ -64,7 +65,11 @@ public class Form: ItemsControl
|
||||
|
||||
protected override Control CreateContainerForItemOverride(object? item, int index, object? recycleKey)
|
||||
{
|
||||
if (item is not Control control) return new FormItem();
|
||||
if (item is not Control control)
|
||||
{
|
||||
if (item is IFormGroup) return new FormGroup();
|
||||
return new FormItem();
|
||||
}
|
||||
return new FormItem()
|
||||
{
|
||||
Content = control,
|
||||
@@ -73,4 +78,17 @@ public class Form: ItemsControl
|
||||
[!FormItem.NoLabelProperty] = control[!FormItem.NoLabelProperty],
|
||||
};
|
||||
}
|
||||
|
||||
protected override void PrepareContainerForItemOverride(Control container, object? item, int index)
|
||||
{
|
||||
base.PrepareContainerForItemOverride(container, item, index);
|
||||
if(container is FormItem formItem && !formItem.IsSet(ContentControl.ContentTemplateProperty))
|
||||
{
|
||||
formItem.ContentTemplate = ItemTemplate;
|
||||
}
|
||||
if (container is FormGroup group && !group.IsSet(FormGroup.ItemTemplateProperty))
|
||||
{
|
||||
group.ItemTemplate = ItemTemplate;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,5 +21,13 @@ public class FormGroup: HeaderedItemsControl
|
||||
[!FormItem.IsRequiredProperty] = control[!FormItem.IsRequiredProperty],
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
protected override void PrepareContainerForItemOverride(Control container, object? item, int index)
|
||||
{
|
||||
base.PrepareContainerForItemOverride(container, item, index);
|
||||
if (container is FormItem formItem && !formItem.IsSet(ContentControl.ContentTemplateProperty))
|
||||
{
|
||||
formItem.ContentTemplate = ItemTemplate;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user