Merge pull request #482 from irihitech/form

Form Dynamic Generation
This commit is contained in:
Zhang Dian
2024-11-15 23:15:24 +08:00
committed by GitHub
11 changed files with 420 additions and 13 deletions

View File

@@ -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>

View File

@@ -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;
}
}
}

View File

@@ -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;
}
}
}