Had the same problem, I ended up creating a custom ContentPage with custom navigation methods :
<ContentPage
Opacity="0"
x:Class="MauiTest.AnimatedPage"
x:Name="AnimatedContainer"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" />
Code behind :
public partial class AnimatedPage : ContentPage
{
public AnimatedPage()
{
InitializeComponent();
AnimatedContainer.FadeTo(1, 100);
AnimatedContainer.Content = Content;
}
public async Task AnimatedGoTo(string pUrl)
{
await AnimatedContainer.FadeTo(0, 100);
await Shell.Current.GoToAsync(pUrl, true);
}
}
And then on every page that should be animated :
<local:AnimatedPage
Title="NewPage1"
x:Class="MauiTest.NewPage1"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:local="clr-namespace:MauiTest"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<VerticalStackLayout>
<Label
HorizontalOptions="Center"
Text="Welcome to .NET MAUI!"
VerticalOptions="Center" />
<Button
Clicked="Button_Clicked"
Text="Go back" />
</VerticalStackLayout>
</local:AnimatedPage>
Code behind :
public partial class NewPage1 : AnimatedPage
{
public NewPage1()
{
InitializeComponent();
}
private void Button_Clicked(object sender, EventArgs e)
{
base.AnimatedGoTo("//main");
}
}
With that as a base you can use any Basic animation for your transitions.