mirror of
https://gitcode.com/gh_mirrors/se/Semi.Avalonia
synced 2026-05-03 06:21:29 +08:00
feat: add page & modal transitions to NavigationPage.
This commit is contained in:
@@ -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}";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user