diff --git a/Semi.Avalonia.sln b/Semi.Avalonia.sln index 85b5a31..827c045 100644 --- a/Semi.Avalonia.sln +++ b/Semi.Avalonia.sln @@ -28,6 +28,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Semi.Avalonia.Demo.Android" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.Demo.Drm", "demo\Semi.Avalonia.Demo.Drm\Semi.Avalonia.Demo.Drm.csproj", "{86D93406-412A-4429-93B2-92AAD0407784}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.TreeDataGrid", "src\Semi.Avalonia.TreeDataGrid\Semi.Avalonia.TreeDataGrid.csproj", "{398D2998-0835-41F5-99A3-608CAB8051E2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semi.Avalonia.TreeDataGrid.Demo", "demo\Semi.Avalonia.TreeDataGrid.Demo\Semi.Avalonia.TreeDataGrid.Demo.csproj", "{6178B545-4BB6-458C-A27C-EE11F3885D38}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -67,6 +71,14 @@ Global {86D93406-412A-4429-93B2-92AAD0407784}.Debug|Any CPU.Build.0 = Debug|Any CPU {86D93406-412A-4429-93B2-92AAD0407784}.Release|Any CPU.ActiveCfg = Release|Any CPU {86D93406-412A-4429-93B2-92AAD0407784}.Release|Any CPU.Build.0 = Release|Any CPU + {398D2998-0835-41F5-99A3-608CAB8051E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {398D2998-0835-41F5-99A3-608CAB8051E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {398D2998-0835-41F5-99A3-608CAB8051E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {398D2998-0835-41F5-99A3-608CAB8051E2}.Release|Any CPU.Build.0 = Release|Any CPU + {6178B545-4BB6-458C-A27C-EE11F3885D38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6178B545-4BB6-458C-A27C-EE11F3885D38}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6178B545-4BB6-458C-A27C-EE11F3885D38}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6178B545-4BB6-458C-A27C-EE11F3885D38}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -77,6 +89,7 @@ Global {D789AEDB-EBDF-4450-8E8E-B4A03FB257B0} = {43091528-9509-43CB-A003-9C5C11E96DD6} {0C81FC1C-5D2D-478A-9876-923A0C85EC2F} = {43091528-9509-43CB-A003-9C5C11E96DD6} {86D93406-412A-4429-93B2-92AAD0407784} = {43091528-9509-43CB-A003-9C5C11E96DD6} + {6178B545-4BB6-458C-A27C-EE11F3885D38} = {43091528-9509-43CB-A003-9C5C11E96DD6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7CA41ED3-2CED-40CC-AA21-28C3B42B1E86} diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/App.axaml b/demo/Semi.Avalonia.TreeDataGrid.Demo/App.axaml new file mode 100644 index 0000000..6ba2484 --- /dev/null +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/App.axaml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/App.axaml.cs b/demo/Semi.Avalonia.TreeDataGrid.Demo/App.axaml.cs new file mode 100644 index 0000000..c4d36b3 --- /dev/null +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/App.axaml.cs @@ -0,0 +1,23 @@ +using Avalonia; +using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Markup.Xaml; + +namespace Semi.Avalonia.TreeDataGrid.Demo; + +public partial class App : Application +{ + public override void Initialize() + { + AvaloniaXamlLoader.Load(this); + } + + public override void OnFrameworkInitializationCompleted() + { + if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + { + desktop.MainWindow = new MainWindow(); + } + + base.OnFrameworkInitializationCompleted(); + } +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml b/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml new file mode 100644 index 0000000..1c957f9 --- /dev/null +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml @@ -0,0 +1,14 @@ + + + + + diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml.cs b/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml.cs new file mode 100644 index 0000000..0694e68 --- /dev/null +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml.cs @@ -0,0 +1,11 @@ +using Avalonia.Controls; + +namespace Semi.Avalonia.TreeDataGrid.Demo; + +public partial class MainWindow : Window +{ + public MainWindow() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/Program.cs b/demo/Semi.Avalonia.TreeDataGrid.Demo/Program.cs new file mode 100644 index 0000000..b71cf5e --- /dev/null +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/Program.cs @@ -0,0 +1,21 @@ +using Avalonia; +using System; + +namespace Semi.Avalonia.TreeDataGrid.Demo; + +class Program +{ + // Initialization code. Don't use any Avalonia, third-party APIs or any + // SynchronizationContext-reliant code before AppMain is called: things aren't initialized + // yet and stuff might break. + [STAThread] + public static void Main(string[] args) => BuildAvaloniaApp() + .StartWithClassicDesktopLifetime(args); + + // Avalonia configuration, don't remove; also used by visual designer. + public static AppBuilder BuildAvaloniaApp() + => AppBuilder.Configure() + .UsePlatformDetect() + .WithInterFont() + .LogToTrace(); +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/Semi.Avalonia.TreeDataGrid.Demo.csproj b/demo/Semi.Avalonia.TreeDataGrid.Demo/Semi.Avalonia.TreeDataGrid.Demo.csproj new file mode 100644 index 0000000..ffa8068 --- /dev/null +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/Semi.Avalonia.TreeDataGrid.Demo.csproj @@ -0,0 +1,25 @@ + + + WinExe + net6.0 + enable + true + app.manifest + true + + + + + + + + + + + + + + + + + diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/app.manifest b/demo/Semi.Avalonia.TreeDataGrid.Demo/app.manifest new file mode 100644 index 0000000..18ebc37 --- /dev/null +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/app.manifest @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + diff --git a/src/Semi.Avalonia.TreeDataGrid/Dark.axaml b/src/Semi.Avalonia.TreeDataGrid/Dark.axaml new file mode 100644 index 0000000..bd82d78 --- /dev/null +++ b/src/Semi.Avalonia.TreeDataGrid/Dark.axaml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/Semi.Avalonia.TreeDataGrid/Index.axaml b/src/Semi.Avalonia.TreeDataGrid/Index.axaml new file mode 100644 index 0000000..b557af1 --- /dev/null +++ b/src/Semi.Avalonia.TreeDataGrid/Index.axaml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/Semi.Avalonia.TreeDataGrid/Light.axaml b/src/Semi.Avalonia.TreeDataGrid/Light.axaml new file mode 100644 index 0000000..bd82d78 --- /dev/null +++ b/src/Semi.Avalonia.TreeDataGrid/Light.axaml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/Semi.Avalonia.TreeDataGrid/Semi.Avalonia.TreeDataGrid.csproj b/src/Semi.Avalonia.TreeDataGrid/Semi.Avalonia.TreeDataGrid.csproj new file mode 100644 index 0000000..7cfd5ae --- /dev/null +++ b/src/Semi.Avalonia.TreeDataGrid/Semi.Avalonia.TreeDataGrid.csproj @@ -0,0 +1,12 @@ + + + + net6.0 + 10 + + + + + + + diff --git a/src/Semi.Avalonia.TreeDataGrid/Shared.axaml b/src/Semi.Avalonia.TreeDataGrid/Shared.axaml new file mode 100644 index 0000000..cd04974 --- /dev/null +++ b/src/Semi.Avalonia.TreeDataGrid/Shared.axaml @@ -0,0 +1,7 @@ + + + M1875 1011l-787 787v-1798h-128v1798l-787 -787l-90 90l941 941l941 -941z + M1965 947l-941 -941l-941 941l90 90l787 -787v1798h128v-1798l787 787z + M 1,0 10,10 l -9,10 -1,-1 L 8,10 -0,1 Z + M0,1 L10,10 20,1 19,0 10,8 1,0 Z + diff --git a/src/Semi.Avalonia.TreeDataGrid/TreeDataGrid.axaml b/src/Semi.Avalonia.TreeDataGrid/TreeDataGrid.axaml new file mode 100644 index 0000000..c7f2555 --- /dev/null +++ b/src/Semi.Avalonia.TreeDataGrid/TreeDataGrid.axaml @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +