diff --git a/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml b/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml
index d965a25..a629167 100644
--- a/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml
+++ b/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml
@@ -12,7 +12,7 @@
-
+
+
+
+
+
+
+ IsChecked="True"
+ IsCheckedChanged="OnHasBackButtonChanged" />
+
+
+
+
+
+
+
+
+
+
+
-
+
+
@@ -59,8 +90,8 @@
BorderThickness="1"
CornerRadius="6"
ClipToBounds="True">
-
diff --git a/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs
index 88a61d3..4cdc2e2 100644
--- a/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs
+++ b/demo/Semi.Avalonia.Demo/Pages/NavigationPageDemo.axaml.cs
@@ -1,3 +1,5 @@
+using System;
+using Avalonia.Animation;
using Avalonia.Controls;
using Avalonia.Interactivity;
@@ -6,6 +8,7 @@ namespace Semi.Avalonia.Demo.Pages;
public partial class NavigationPageDemo : UserControl
{
private int _pageCount;
+ private int _modalCount;
public NavigationPageDemo()
{
@@ -15,7 +18,7 @@ public partial class NavigationPageDemo : UserControl
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);
+ await DemoNav.PushAsync(NavigationDemoHelper.MakePage("Home", "Welcome!\nUse the buttons to push and pop pages/modals.", 0), null);
UpdateStatus();
}
@@ -42,6 +45,27 @@ public partial class NavigationPageDemo : UserControl
UpdateStatus();
}
+ private async void OnPushModal(object? sender, RoutedEventArgs e)
+ {
+ _modalCount++;
+ var modal = NavigationDemoHelper.MakePage($"Modal {_modalCount}", "This page was presented modally.\nTap 'Pop Modal' to dismiss.", _modalCount);
+ await DemoNav.PushModalAsync(modal);
+ UpdateStatus();
+ }
+
+ private async void OnPopModal(object? sender, RoutedEventArgs e)
+ {
+ await DemoNav.PopModalAsync();
+ UpdateStatus();
+ }
+
+ private async void OnPopAllModals(object? sender, RoutedEventArgs e)
+ {
+ await DemoNav.PopAllModalsAsync();
+ _modalCount = 0;
+ UpdateStatus();
+ }
+
private void OnHasNavBarChanged(object? sender, RoutedEventArgs e)
{
if (DemoNav == null)
@@ -50,7 +74,7 @@ public partial class NavigationPageDemo : UserControl
NavigationPage.SetHasNavigationBar(DemoNav.CurrentPage, HasNavBarCheck.IsChecked == true);
}
- private void OnHasBackButonChanged(object? sender, RoutedEventArgs e)
+ private void OnHasBackButtonChanged(object? sender, RoutedEventArgs e)
{
if (DemoNav == null)
return;
@@ -58,9 +82,30 @@ public partial class NavigationPageDemo : UserControl
NavigationPage.SetHasBackButton(DemoNav.CurrentPage, HasBackButtonCheck.IsChecked == true);
}
+ private void OnHasShadowChanged(object? sender, RoutedEventArgs e)
+ {
+ if (DemoNav == null)
+ return;
+ if (DemoNav.CurrentPage != null)
+ DemoNav.HasShadow = HasShadowCheck.IsChecked == true;
+ }
+
+ private void OnTransitionChanged(object? sender, SelectionChangedEventArgs e)
+ {
+ if (DemoNav == null)
+ return;
+ DemoNav.ModalTransition = TransitionCombo.SelectedIndex switch
+ {
+ 1 => new CrossFade(TimeSpan.FromMilliseconds(250)),
+ 2 => null,
+ _ => new PageSlide(TimeSpan.FromMilliseconds(300), PageSlide.SlideAxis.Vertical)
+ };
+ }
+
private void UpdateStatus()
{
StatusText.Text = $"Depth: {DemoNav.StackDepth}";
HeaderText.Text = $"Current: {DemoNav.CurrentPage?.Header ?? "(none)"}";
+ ModalText.Text = $"Modals: {DemoNav.ModalStack.Count}";
}
}
\ No newline at end of file
diff --git a/src/Semi.Avalonia/Controls/NavigationPage.axaml b/src/Semi.Avalonia/Controls/NavigationPage.axaml
index 2658f14..0b4c5ee 100644
--- a/src/Semi.Avalonia/Controls/NavigationPage.axaml
+++ b/src/Semi.Avalonia/Controls/NavigationPage.axaml
@@ -8,6 +8,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -115,7 +135,7 @@
-
+