Merge pull request #111 from irihitech/form

Form
This commit is contained in:
Zhang Dian
2024-02-20 17:45:37 +08:00
committed by GitHub
13 changed files with 430 additions and 2 deletions

View File

@@ -13,6 +13,7 @@ public static class MenuKeys
public const string MenuKeyDrawer = "Drawer";
public const string MenuKeyDualBadge = "DualBadge";
public const string MenuKeyEnumSelector = "EnumSelector";
public const string MenuKeyForm = "Form";
public const string MenuKeyImageViewer = "ImageViewer";
public const string MenuKeyIpBox = "IPv4Box";
public const string MenuKeyIconButton = "IconButton";

View File

@@ -0,0 +1,71 @@
<UserControl
x:Class="Ursa.Demo.Pages.FormDemo"
xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:common="clr-namespace:Ursa.Common;assembly=Ursa"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:u="https://irihi.tech/ursa"
xmlns:vm="clr-namespace:Ursa.Demo.ViewModels;assembly=Ursa.Demo"
d:DesignHeight="450"
d:DesignWidth="800"
x:CompileBindings="True"
x:DataType="vm:FormDemoViewModel"
mc:Ignorable="d">
<ScrollViewer>
<StackPanel>
<Grid RowDefinitions="Auto, Auto" ColumnDefinitions="Auto, Auto">
<TextBlock Grid.Row="0" Grid.Column="0" Text="Label Position" VerticalAlignment="Center"></TextBlock>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Label Alignment" VerticalAlignment="Center"></TextBlock>
<u:EnumSelector Grid.Row="0" Grid.Column="1"
Name="position"
EnumType="common:Position"
Value="{x:Static common:Position.Top}" />
<u:EnumSelector Grid.Row="1" Grid.Column="1"
Name="alignment"
EnumType="HorizontalAlignment"
Value="{x:Static HorizontalAlignment.Left}" />
</Grid>
<u:Form
DataContext="{Binding Model}"
LabelAlignment="{Binding #alignment.Value}"
LabelPosition="{Binding #position.Value}"
LabelWidth="*">
<u:FormGroup Header="Information">
<TextBox
Width="300"
u:FormItem.IsRequired="True"
u:FormItem.Label="Name"
Text="{Binding Name}" />
<TextBox
Width="300"
u:FormItem.Label="Email"
Text="{Binding Email}" />
</u:FormGroup>
<u:FormItem Label="Please select a Date">
<CalendarDatePicker SelectedDate="{Binding Date}" />
</u:FormItem>
<u:FormGroup Header="Education">
<TextBox
HorizontalAlignment="Stretch"
u:FormItem.IsRequired="True"
u:FormItem.Label="Name"
Text="{Binding Name}" />
<TextBox
HorizontalAlignment="Stretch"
u:FormItem.Label="Email"
u:FormItem.IsRequired="True"
Text="{Binding Email}" />
</u:FormGroup>
<u:FormItem Label="Click to Submit">
<Button Content="Button With Label" />
</u:FormItem>
<CheckBox Content="I Agree User Agreement" u:FormItem.NoLabel="True"></CheckBox>
<u:FormItem NoLabel="True">
<Button HorizontalAlignment="Left" Content="No Label" />
</u:FormItem>
</u:Form>
</StackPanel>
</ScrollViewer>
</UserControl>

View File

@@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Ursa.Demo.Pages;
public partial class FormDemo : UserControl
{
public FormDemo()
{
InitializeComponent();
}
}

View File

@@ -19,7 +19,7 @@
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="$(AvaloniaVersion)" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.1.0" />
<PackageReference Include="Semi.Avalonia" Version="11.0.0" />
<PackageReference Include="Semi.Avalonia" Version="11.0.7" />
</ItemGroup>
<ItemGroup>

View File

@@ -0,0 +1,48 @@
using System;
using System.ComponentModel.DataAnnotations;
using CommunityToolkit.Mvvm.ComponentModel;
namespace Ursa.Demo.ViewModels;
public partial class FormDemoViewModel: ObservableObject
{
[ObservableProperty] private DataModel _model;
public FormDemoViewModel()
{
Model = new DataModel();
}
}
public partial class DataModel : ObservableObject
{
private string _name;
[MinLength(10)]
public string Name
{
get=>_name;
set => SetProperty(ref _name, value);
}
private string _email;
[EmailAddress]
public string Email
{
get=>_email;
set => SetProperty(ref _email, value);
}
private DateTime _date;
public DateTime Date
{
get => _date;
set => SetProperty(ref _date, value);
}
public DataModel()
{
Date = DateTime.Today;
}
}

View File

@@ -35,6 +35,7 @@ public class MainViewViewModel : ViewModelBase
MenuKeys.MenuKeyDrawer => new DrawerDemoViewModel(),
MenuKeys.MenuKeyDualBadge => new DualBadgeDemoViewModel(),
MenuKeys.MenuKeyEnumSelector => new EnumSelectorDemoViewModel(),
MenuKeys.MenuKeyForm => new FormDemoViewModel(),
MenuKeys.MenuKeyImageViewer => new ImageViewerDemoViewModel(),
MenuKeys.MenuKeyIconButton => new IconButtonDemoViewModel(),
MenuKeys.MenuKeyIpBox => new IPv4BoxDemoViewModel(),

View File

@@ -22,6 +22,7 @@ public class MenuViewModel: ViewModelBase
new() { MenuHeader = "Drawer", Key = MenuKeys.MenuKeyDrawer },
new() { MenuHeader = "DualBadge", Key = MenuKeys.MenuKeyDualBadge },
new() { MenuHeader = "Enum Selector", Key = MenuKeys.MenuKeyEnumSelector },
new() { MenuHeader = "Form", Key = MenuKeys.MenuKeyForm },
new() { MenuHeader = "Icon Button", Key = MenuKeys.MenuKeyIconButton },
new() { MenuHeader = "ImageViewer", Key = MenuKeys.MenuKeyImageViewer },
new() { MenuHeader = "IPv4Box", Key = MenuKeys.MenuKeyIpBox },