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/demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml.cs
new file mode 100644
index 0000000..c5d29e3
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/ContentPageDemo.axaml.cs
@@ -0,0 +1,93 @@
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Media;
+using Avalonia.Layout;
+
+namespace Semi.Avalonia.Demo.Pages;
+
+public partial class ContentPageDemo : UserControl
+{
+ private static readonly Color[] PageColors =
+ [
+ Color.FromRgb(0xE3, 0xF2, 0xFD), // blue
+ Color.FromRgb(0xF3, 0xE5, 0xF5), // purple
+ Color.FromRgb(0xE8, 0xF5, 0xE9), // green
+ Color.FromRgb(0xFF, 0xF8, 0xE1), // amber
+ Color.FromRgb(0xFB, 0xE9, 0xE7), // deep orange
+ ];
+
+ private int _pageCount;
+
+ public ContentPageDemo()
+ {
+ InitializeComponent();
+ Loaded += OnLoaded;
+ }
+
+ private async void OnLoaded(object? sender, RoutedEventArgs e)
+ {
+ await DemoNav.PushAsync(MakePage("Root Page", "ContentPage inside a NavigationPage.\nUse the options to navigate."));
+ UpdateStatus();
+ }
+
+ private async void OnPush(object? sender, RoutedEventArgs e)
+ {
+ _pageCount++;
+ await DemoNav.PushAsync(MakePage($"Page {_pageCount}", $"ContentPage #{_pageCount}.\nNavigate back using the back button."));
+ UpdateStatus();
+ }
+
+ private async void OnPop(object? sender, RoutedEventArgs e)
+ {
+ await DemoNav.PopAsync();
+ UpdateStatus();
+ }
+
+ private async void OnPopToRoot(object? sender, RoutedEventArgs e)
+ {
+ await DemoNav.PopToRootAsync();
+ _pageCount = 0;
+ UpdateStatus();
+ }
+
+ private void UpdateStatus()
+ {
+ StatusText.Text = $"Depth: {DemoNav.StackDepth} | Current: {DemoNav.CurrentPage?.Header}";
+ }
+
+ private ContentPage MakePage(string header, string body) =>
+ new ContentPage
+ {
+ Header = header,
+ Background = new SolidColorBrush(PageColors[_pageCount % PageColors.Length]),
+ Content = new StackPanel
+ {
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ Spacing = 10,
+ Children =
+ {
+ new TextBlock
+ {
+ Text = header,
+ FontSize = 20,
+ FontWeight = FontWeight.SemiBold,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ Foreground = Brushes.Black,
+ },
+ new TextBlock
+ {
+ Text = body,
+ FontSize = 13,
+ Opacity = 0.7,
+ TextWrapping = TextWrapping.Wrap,
+ TextAlignment = TextAlignment.Center,
+ MaxWidth = 260,
+ Foreground = Brushes.Black,
+ }
+ }
+ },
+ HorizontalContentAlignment = HorizontalAlignment.Stretch,
+ VerticalContentAlignment = VerticalAlignment.Stretch
+ };
+}
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml
new file mode 100644
index 0000000..e5affdc
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml.cs
new file mode 100644
index 0000000..7e0316f
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/DrawerPageDemo.axaml.cs
@@ -0,0 +1,68 @@
+using System;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Layout;
+using Avalonia.Media;
+
+namespace Semi.Avalonia.Demo.Pages;
+
+public partial class DrawerPageDemo : UserControl
+{
+ public DrawerPageDemo()
+ {
+ InitializeComponent();
+ }
+
+ protected override void OnLoaded(RoutedEventArgs e)
+ {
+ base.OnLoaded(e);
+ DemoDrawer.Opened += OnDrawerStatusChanged;
+ DemoDrawer.Closed += OnDrawerStatusChanged;
+ }
+
+ protected override void OnUnloaded(RoutedEventArgs e)
+ {
+ base.OnUnloaded(e);
+ DemoDrawer.Opened -= OnDrawerStatusChanged;
+ DemoDrawer.Closed -= OnDrawerStatusChanged;
+ }
+
+ private void OnDrawerStatusChanged(object? sender, EventArgs e) => UpdateStatus();
+
+ private void OnToggleDrawer(object? sender, RoutedEventArgs e)
+ {
+ DemoDrawer.IsOpen = !DemoDrawer.IsOpen;
+ }
+
+ private void OnGestureChanged(object? sender, RoutedEventArgs e)
+ {
+ DemoDrawer.IsGestureEnabled = GestureCheck.IsChecked == true;
+ }
+
+ private void OnMenuSelectionChanged(object? sender, SelectionChangedEventArgs e)
+ {
+ if (DrawerMenu.SelectedItem is ListBoxItem item)
+ {
+ DemoDrawer.Content = new ContentPage
+ {
+ Header = item.Content?.ToString(),
+ Content = new TextBlock
+ {
+ Text = $"{item.Content} page content",
+ FontSize = 16,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ Foreground = Brushes.Black,
+ },
+ HorizontalContentAlignment = HorizontalAlignment.Stretch,
+ VerticalContentAlignment = VerticalAlignment.Stretch
+ };
+ DemoDrawer.IsOpen = false;
+ }
+ }
+
+ private void UpdateStatus()
+ {
+ StatusText.Text = $"Drawer: {(DemoDrawer.IsOpen ? "Open" : "Closed")}";
+ }
+}
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Pages/NavigationDemoHelper.cs b/demo/Semi.Avalonia.Demo/Pages/NavigationDemoHelper.cs
new file mode 100644
index 0000000..fd7ad57
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/NavigationDemoHelper.cs
@@ -0,0 +1,66 @@
+using Avalonia.Controls;
+using Avalonia.Layout;
+using Avalonia.Media;
+
+namespace Semi.Avalonia.Demo.Pages;
+
+///
+/// Shared helpers for ControlCatalog demo pages.
+///
+internal static class NavigationDemoHelper
+{
+ ///
+ /// Pastel background brushes cycled by page index.
+ ///
+ internal static readonly IBrush[] PageBrushes =
+ [
+ new SolidColorBrush(Color.Parse("#BBDEFB")),
+ new SolidColorBrush(Color.Parse("#C8E6C9")),
+ new SolidColorBrush(Color.Parse("#FFE0B2")),
+ new SolidColorBrush(Color.Parse("#E1BEE7")),
+ new SolidColorBrush(Color.Parse("#FFCDD2")),
+ new SolidColorBrush(Color.Parse("#B2EBF2"))
+ ];
+
+ internal static IBrush GetPageBrush(int index) =>
+ PageBrushes[(index % PageBrushes.Length + PageBrushes.Length) % PageBrushes.Length];
+
+ ///
+ /// Creates a simple demo ContentPage with a centered title and subtitle.
+ ///
+ internal static ContentPage MakePage(string header, string body, int colorIndex) =>
+ new()
+ {
+ Header = header,
+ Background = GetPageBrush(colorIndex),
+ Content = new StackPanel
+ {
+ HorizontalAlignment = HorizontalAlignment.Center,
+ VerticalAlignment = VerticalAlignment.Center,
+ Spacing = 8,
+ Children =
+ {
+ new TextBlock
+ {
+ Text = header,
+ FontSize = 20,
+ FontWeight = FontWeight.SemiBold,
+ HorizontalAlignment = HorizontalAlignment.Center,
+ Foreground = Brushes.Black,
+ },
+ new TextBlock
+ {
+ Text = body,
+ FontSize = 13,
+ Opacity = 0.7,
+ TextWrapping = TextWrapping.Wrap,
+ TextAlignment = TextAlignment.Center,
+ MaxWidth = 260,
+ Foreground = Brushes.Black,
+ }
+ }
+ },
+ HorizontalContentAlignment = HorizontalAlignment.Stretch,
+ VerticalContentAlignment = VerticalAlignment.Stretch
+ };
+}
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml
new file mode 100644
index 0000000..055e20a
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs
new file mode 100644
index 0000000..88a61d3
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs
@@ -0,0 +1,66 @@
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+
+namespace Semi.Avalonia.Demo.Pages;
+
+public partial class NavigationPageDemo : UserControl
+{
+ private int _pageCount;
+
+ public NavigationPageDemo()
+ {
+ InitializeComponent();
+ Loaded += OnLoaded;
+ }
+
+ private async void OnLoaded(object? sender, RoutedEventArgs e)
+ {
+ await DemoNav.PushAsync(NavigationDemoHelper.MakePage("Home", "Welcome!\nUse the buttons to push and pop pages.", 0), null);
+ UpdateStatus();
+ }
+
+ private async void OnPush(object? sender, RoutedEventArgs e)
+ {
+ _pageCount++;
+ var page = NavigationDemoHelper.MakePage($"Page {_pageCount}", $"This is page {_pageCount}.", _pageCount);
+ NavigationPage.SetHasNavigationBar(page, HasNavBarCheck.IsChecked == true);
+ NavigationPage.SetHasBackButton(page, HasBackButtonCheck.IsChecked == true);
+ await DemoNav.PushAsync(page);
+ UpdateStatus();
+ }
+
+ private async void OnPop(object? sender, RoutedEventArgs e)
+ {
+ await DemoNav.PopAsync();
+ UpdateStatus();
+ }
+
+ private async void OnPopToRoot(object? sender, RoutedEventArgs e)
+ {
+ await DemoNav.PopToRootAsync();
+ _pageCount = 0;
+ UpdateStatus();
+ }
+
+ private void OnHasNavBarChanged(object? sender, RoutedEventArgs e)
+ {
+ if (DemoNav == null)
+ return;
+ if (DemoNav.CurrentPage != null)
+ NavigationPage.SetHasNavigationBar(DemoNav.CurrentPage, HasNavBarCheck.IsChecked == true);
+ }
+
+ private void OnHasBackButonChanged(object? sender, RoutedEventArgs e)
+ {
+ if (DemoNav == null)
+ return;
+ if (DemoNav.CurrentPage != null)
+ NavigationPage.SetHasBackButton(DemoNav.CurrentPage, HasBackButtonCheck.IsChecked == true);
+ }
+
+ private void UpdateStatus()
+ {
+ StatusText.Text = $"Depth: {DemoNav.StackDepth}";
+ HeaderText.Text = $"Current: {DemoNav.CurrentPage?.Header ?? "(none)"}";
+ }
+}
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml
new file mode 100644
index 0000000..0f78430
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml.cs
new file mode 100644
index 0000000..9c2b097
--- /dev/null
+++ b/demo/Semi.Avalonia.Demo/Pages/TabbedPageDemo.axaml.cs
@@ -0,0 +1,84 @@
+using System.Collections;
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Interactivity;
+using Avalonia.Media;
+
+namespace Semi.Avalonia.Demo.Pages;
+
+public partial class TabbedPageDemo : UserControl
+{
+ private int _tabCounter = 3;
+
+ public TabbedPageDemo()
+ {
+ InitializeComponent();
+ }
+
+ private void OnAddTab(object? sender, RoutedEventArgs e)
+ {
+ var idx = ++_tabCounter;
+ var page = new ContentPage
+ {
+ Header = $"Tab {idx}",
+ Content = new StackPanel
+ {
+ Margin = new Thickness(16),
+ Spacing = 8,
+ Children =
+ {
+ new TextBlock
+ {
+ Text = $"Tab {idx}",
+ FontSize = 24,
+ FontWeight = FontWeight.Bold,
+ },
+ new TextBlock
+ {
+ Text = $"This tab was added dynamically (tab #{idx}).",
+ Opacity = 0.7,
+ TextWrapping = TextWrapping.Wrap,
+ }
+ }
+ }
+ };
+
+ ((IList)DemoTabs.Pages!).Add(page);
+ UpdateStatus();
+ }
+
+ private void OnRemoveTab(object? sender, RoutedEventArgs e)
+ {
+ var pages = (IList)DemoTabs.Pages!;
+ if (pages.Count > 1)
+ {
+ pages.RemoveAt(pages.Count - 1);
+ UpdateStatus();
+ }
+ }
+
+ private void OnPlacementChanged(object? sender, SelectionChangedEventArgs e)
+ {
+ if (DemoTabs == null) return;
+ DemoTabs.TabPlacement = PlacementCombo.SelectedIndex switch
+ {
+ 1 => TabPlacement.Bottom,
+ 2 => TabPlacement.Left,
+ 3 => TabPlacement.Right,
+ _ => TabPlacement.Top
+ };
+ }
+
+ private void OnSelectionChanged(object? sender, PageSelectionChangedEventArgs e)
+ {
+ UpdateStatus();
+ }
+
+ private void UpdateStatus()
+ {
+ if (StatusText == null) return;
+ var pages = (IList)DemoTabs.Pages!;
+ var pageName = (DemoTabs.SelectedPage as ContentPage)?.Header?.ToString() ?? "—";
+ StatusText.Text = $"{pages.Count} tab{(pages.Count != 1 ? "s" : "")} | Selected: {pageName} ({DemoTabs.SelectedIndex})";
+ }
+}
\ No newline at end of file
diff --git a/demo/Semi.Avalonia.Demo/Views/MainView.axaml b/demo/Semi.Avalonia.Demo/Views/MainView.axaml
index f5e24df..f6304d0 100644
--- a/demo/Semi.Avalonia.Demo/Views/MainView.axaml
+++ b/demo/Semi.Avalonia.Demo/Views/MainView.axaml
@@ -215,6 +215,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Semi.Avalonia/Controls/ContentPage.axaml b/src/Semi.Avalonia/Controls/ContentPage.axaml
new file mode 100644
index 0000000..9ab5ba5
--- /dev/null
+++ b/src/Semi.Avalonia/Controls/ContentPage.axaml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Semi.Avalonia/Controls/DrawerPage.axaml b/src/Semi.Avalonia/Controls/DrawerPage.axaml
new file mode 100644
index 0000000..8273f0f
--- /dev/null
+++ b/src/Semi.Avalonia/Controls/DrawerPage.axaml
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Semi.Avalonia/Controls/NavigationPage.axaml b/src/Semi.Avalonia/Controls/NavigationPage.axaml
new file mode 100644
index 0000000..26ef8d1
--- /dev/null
+++ b/src/Semi.Avalonia/Controls/NavigationPage.axaml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+