From 1d59cff87d82b313242511554c096d6d3fbcc2a6 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sun, 15 Mar 2026 03:37:50 +0800 Subject: [PATCH] Implement Semi Design theme for page-based navigation controls (ContentPage / DrawerPage / NavigationPage / TabbedPage) (#766) * Initial plan * Implement Semi Design theme for ContentPage, DrawerPage, NavigationPage, TabbedPage Co-authored-by: zdpcdt <54255897+zdpcdt@users.noreply.github.com> * fix: bind ItemsSource to Pages in TabControl of TabbedPage. * chore: split demo navigation pages. * demo: improve NavigationPage demo pages with interactive controls Co-authored-by: zdpcdt <54255897+zdpcdt@users.noreply.github.com> * fix: use comma-separated Padding syntax and remove trailing newline Co-authored-by: zdpcdt <54255897+zdpcdt@users.noreply.github.com> * feat: implement semi design theme for navigation controls in demo pages. * feat: enhance demo pages with foreground color for better visibility * feat: add back button visibility control and improve navigation page layout. * chore: remove DrawerPage unused static resources. * feat: add HighContrast resources for ContentPage, DrawerPage, NavigationPage, TabbedPage Co-authored-by: zdpcdt <54255897+zdpcdt@users.noreply.github.com> * feat: implement CardTabbedPage & ButtonTabbedPage themes. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: zdpcdt <54255897+zdpcdt@users.noreply.github.com> Co-authored-by: Dong Bin --- .../Pages/ContentPageDemo.axaml | 54 +++++++ .../Pages/ContentPageDemo.axaml.cs | 93 ++++++++++++ .../Pages/DrawerPageDemo.axaml | 72 +++++++++ .../Pages/DrawerPageDemo.axaml.cs | 68 +++++++++ .../Pages/NavigationDemoHelper.cs | 66 ++++++++ .../Pages/NavigationPageDemo.axaml | 65 ++++++++ .../Pages/NavigationPageDemo.axaml.cs | 66 ++++++++ .../Pages/TabbedPageDemo.axaml | 80 ++++++++++ .../Pages/TabbedPageDemo.axaml.cs | 84 ++++++++++ demo/Semi.Avalonia.Demo/Views/MainView.axaml | 12 ++ src/Semi.Avalonia/Controls/ContentPage.axaml | 43 ++++++ src/Semi.Avalonia/Controls/DrawerPage.axaml | 143 ++++++++++++++++++ .../Controls/NavigationPage.axaml | 94 ++++++++++++ src/Semi.Avalonia/Controls/TabbedPage.axaml | 41 +++++ src/Semi.Avalonia/Controls/_index.axaml | 4 + .../Themes/Dark/ContentPage.axaml | 5 + .../Themes/Dark/DrawerPage.axaml | 13 ++ .../Themes/Dark/NavigationPage.axaml | 14 ++ .../Themes/Dark/TabbedPage.axaml | 2 + src/Semi.Avalonia/Themes/Dark/_index.axaml | 4 + .../Themes/HighContrast/ContentPage.axaml | 5 + .../Themes/HighContrast/DrawerPage.axaml | 13 ++ .../Themes/HighContrast/NavigationPage.axaml | 14 ++ .../Themes/HighContrast/TabbedPage.axaml | 2 + .../Themes/HighContrast/_index.axaml | 4 + .../Themes/Light/ContentPage.axaml | 5 + .../Themes/Light/DrawerPage.axaml | 13 ++ .../Themes/Light/NavigationPage.axaml | 14 ++ .../Themes/Light/TabbedPage.axaml | 2 + src/Semi.Avalonia/Themes/Light/_index.axaml | 4 + .../Themes/Shared/ContentPage.axaml | 4 + .../Themes/Shared/DrawerPage.axaml | 15 ++ .../Themes/Shared/NavigationPage.axaml | 7 + .../Themes/Shared/TabbedPage.axaml | 4 + src/Semi.Avalonia/Themes/Shared/_index.axaml | 4 + 35 files changed, 1133 insertions(+) create mode 100644 demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml create mode 100644 demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml.cs create mode 100644 demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml create mode 100644 demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml.cs create mode 100644 demo/Semi.Avalonia.Demo/Pages/NavigationDemoHelper.cs create mode 100644 demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml create mode 100644 demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs create mode 100644 demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml create mode 100644 demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml.cs create mode 100644 src/Semi.Avalonia/Controls/ContentPage.axaml create mode 100644 src/Semi.Avalonia/Controls/DrawerPage.axaml create mode 100644 src/Semi.Avalonia/Controls/NavigationPage.axaml create mode 100644 src/Semi.Avalonia/Controls/TabbedPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Dark/ContentPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Dark/DrawerPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Dark/NavigationPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Dark/TabbedPage.axaml create mode 100644 src/Semi.Avalonia/Themes/HighContrast/ContentPage.axaml create mode 100644 src/Semi.Avalonia/Themes/HighContrast/DrawerPage.axaml create mode 100644 src/Semi.Avalonia/Themes/HighContrast/NavigationPage.axaml create mode 100644 src/Semi.Avalonia/Themes/HighContrast/TabbedPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Light/ContentPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Light/DrawerPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Light/NavigationPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Light/TabbedPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Shared/ContentPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Shared/DrawerPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Shared/NavigationPage.axaml create mode 100644 src/Semi.Avalonia/Themes/Shared/TabbedPage.axaml diff --git a/demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml new file mode 100644 index 0000000..983fff3 --- /dev/null +++ b/demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Semi.Avalonia/Controls/TabbedPage.axaml b/src/Semi.Avalonia/Controls/TabbedPage.axaml new file mode 100644 index 0000000..64b68b7 --- /dev/null +++ b/src/Semi.Avalonia/Controls/TabbedPage.axaml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Semi.Avalonia/Controls/_index.axaml b/src/Semi.Avalonia/Controls/_index.axaml index bdce23c..7b389c8 100644 --- a/src/Semi.Avalonia/Controls/_index.axaml +++ b/src/Semi.Avalonia/Controls/_index.axaml @@ -6,6 +6,7 @@ + @@ -18,6 +19,7 @@ + @@ -33,6 +35,7 @@ + @@ -47,6 +50,7 @@ + diff --git a/src/Semi.Avalonia/Themes/Dark/ContentPage.axaml b/src/Semi.Avalonia/Themes/Dark/ContentPage.axaml new file mode 100644 index 0000000..268316e --- /dev/null +++ b/src/Semi.Avalonia/Themes/Dark/ContentPage.axaml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Semi.Avalonia/Themes/Dark/DrawerPage.axaml b/src/Semi.Avalonia/Themes/Dark/DrawerPage.axaml new file mode 100644 index 0000000..09cd1a7 --- /dev/null +++ b/src/Semi.Avalonia/Themes/Dark/DrawerPage.axaml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/Semi.Avalonia/Themes/Dark/NavigationPage.axaml b/src/Semi.Avalonia/Themes/Dark/NavigationPage.axaml new file mode 100644 index 0000000..3b68d1b --- /dev/null +++ b/src/Semi.Avalonia/Themes/Dark/NavigationPage.axaml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/Semi.Avalonia/Themes/Dark/TabbedPage.axaml b/src/Semi.Avalonia/Themes/Dark/TabbedPage.axaml new file mode 100644 index 0000000..2f71e8f --- /dev/null +++ b/src/Semi.Avalonia/Themes/Dark/TabbedPage.axaml @@ -0,0 +1,2 @@ + + diff --git a/src/Semi.Avalonia/Themes/Dark/_index.axaml b/src/Semi.Avalonia/Themes/Dark/_index.axaml index 1c07720..46fdce6 100644 --- a/src/Semi.Avalonia/Themes/Dark/_index.axaml +++ b/src/Semi.Avalonia/Themes/Dark/_index.axaml @@ -4,6 +4,7 @@ + @@ -16,6 +17,7 @@ + @@ -26,6 +28,7 @@ + @@ -36,6 +39,7 @@ + diff --git a/src/Semi.Avalonia/Themes/HighContrast/ContentPage.axaml b/src/Semi.Avalonia/Themes/HighContrast/ContentPage.axaml new file mode 100644 index 0000000..1d18d01 --- /dev/null +++ b/src/Semi.Avalonia/Themes/HighContrast/ContentPage.axaml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Semi.Avalonia/Themes/HighContrast/DrawerPage.axaml b/src/Semi.Avalonia/Themes/HighContrast/DrawerPage.axaml new file mode 100644 index 0000000..aa185e9 --- /dev/null +++ b/src/Semi.Avalonia/Themes/HighContrast/DrawerPage.axaml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/Semi.Avalonia/Themes/HighContrast/NavigationPage.axaml b/src/Semi.Avalonia/Themes/HighContrast/NavigationPage.axaml new file mode 100644 index 0000000..c80946b --- /dev/null +++ b/src/Semi.Avalonia/Themes/HighContrast/NavigationPage.axaml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/Semi.Avalonia/Themes/HighContrast/TabbedPage.axaml b/src/Semi.Avalonia/Themes/HighContrast/TabbedPage.axaml new file mode 100644 index 0000000..2f71e8f --- /dev/null +++ b/src/Semi.Avalonia/Themes/HighContrast/TabbedPage.axaml @@ -0,0 +1,2 @@ + + diff --git a/src/Semi.Avalonia/Themes/HighContrast/_index.axaml b/src/Semi.Avalonia/Themes/HighContrast/_index.axaml index 1c07720..ea9e375 100644 --- a/src/Semi.Avalonia/Themes/HighContrast/_index.axaml +++ b/src/Semi.Avalonia/Themes/HighContrast/_index.axaml @@ -12,9 +12,11 @@ + + @@ -25,6 +27,7 @@ + @@ -36,6 +39,7 @@ + diff --git a/src/Semi.Avalonia/Themes/Light/ContentPage.axaml b/src/Semi.Avalonia/Themes/Light/ContentPage.axaml new file mode 100644 index 0000000..268316e --- /dev/null +++ b/src/Semi.Avalonia/Themes/Light/ContentPage.axaml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Semi.Avalonia/Themes/Light/DrawerPage.axaml b/src/Semi.Avalonia/Themes/Light/DrawerPage.axaml new file mode 100644 index 0000000..e2098ff --- /dev/null +++ b/src/Semi.Avalonia/Themes/Light/DrawerPage.axaml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Semi.Avalonia/Themes/Light/NavigationPage.axaml b/src/Semi.Avalonia/Themes/Light/NavigationPage.axaml new file mode 100644 index 0000000..3b68d1b --- /dev/null +++ b/src/Semi.Avalonia/Themes/Light/NavigationPage.axaml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/Semi.Avalonia/Themes/Light/TabbedPage.axaml b/src/Semi.Avalonia/Themes/Light/TabbedPage.axaml new file mode 100644 index 0000000..2f71e8f --- /dev/null +++ b/src/Semi.Avalonia/Themes/Light/TabbedPage.axaml @@ -0,0 +1,2 @@ + + diff --git a/src/Semi.Avalonia/Themes/Light/_index.axaml b/src/Semi.Avalonia/Themes/Light/_index.axaml index 1c07720..46fdce6 100644 --- a/src/Semi.Avalonia/Themes/Light/_index.axaml +++ b/src/Semi.Avalonia/Themes/Light/_index.axaml @@ -4,6 +4,7 @@ + @@ -16,6 +17,7 @@ + @@ -26,6 +28,7 @@ + @@ -36,6 +39,7 @@ + diff --git a/src/Semi.Avalonia/Themes/Shared/ContentPage.axaml b/src/Semi.Avalonia/Themes/Shared/ContentPage.axaml new file mode 100644 index 0000000..f30a235 --- /dev/null +++ b/src/Semi.Avalonia/Themes/Shared/ContentPage.axaml @@ -0,0 +1,4 @@ + + + 48 + diff --git a/src/Semi.Avalonia/Themes/Shared/DrawerPage.axaml b/src/Semi.Avalonia/Themes/Shared/DrawerPage.axaml new file mode 100644 index 0000000..48c5d66 --- /dev/null +++ b/src/Semi.Avalonia/Themes/Shared/DrawerPage.axaml @@ -0,0 +1,15 @@ + + + 48 + 4 0 + 0 0 0 1 + + + 280 + 56 + + + 32 + 8 0 + + diff --git a/src/Semi.Avalonia/Themes/Shared/NavigationPage.axaml b/src/Semi.Avalonia/Themes/Shared/NavigationPage.axaml new file mode 100644 index 0000000..7275100 --- /dev/null +++ b/src/Semi.Avalonia/Themes/Shared/NavigationPage.axaml @@ -0,0 +1,7 @@ + + + 48 + 4 0 + 0 0 0 1 + + diff --git a/src/Semi.Avalonia/Themes/Shared/TabbedPage.axaml b/src/Semi.Avalonia/Themes/Shared/TabbedPage.axaml new file mode 100644 index 0000000..1b87603 --- /dev/null +++ b/src/Semi.Avalonia/Themes/Shared/TabbedPage.axaml @@ -0,0 +1,4 @@ + + + + diff --git a/src/Semi.Avalonia/Themes/Shared/_index.axaml b/src/Semi.Avalonia/Themes/Shared/_index.axaml index 1c07720..46fdce6 100644 --- a/src/Semi.Avalonia/Themes/Shared/_index.axaml +++ b/src/Semi.Avalonia/Themes/Shared/_index.axaml @@ -4,6 +4,7 @@ + @@ -16,6 +17,7 @@ + @@ -26,6 +28,7 @@ + @@ -36,6 +39,7 @@ +