Parameter improvements
This commit is contained in:
@@ -42,18 +42,13 @@ public class ContentTemplate :
|
||||
|
||||
async void HandleUnloaded(object? sender, RoutedEventArgs args)
|
||||
{
|
||||
control.Unloaded -= HandleLoaded;
|
||||
control.Unloaded -= HandleUnloaded;
|
||||
if (control.DataContext is object content)
|
||||
{
|
||||
if (content is IDeactivated deactivated)
|
||||
{
|
||||
await deactivated.OnDeactivated();
|
||||
}
|
||||
|
||||
//if (content is IDisposable disposable)
|
||||
//{
|
||||
// disposable.Dispose();
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Controls.Primitives;
|
||||
using Avalonia.Interactivity;
|
||||
using FluentAvalonia.UI.Media.Animation;
|
||||
using FluentAvalonia.UI.Navigation;
|
||||
using Toolkit.Foundation;
|
||||
using Toolkit.UI.Avalonia;
|
||||
using Toolkit.UI.Controls.Avalonia;
|
||||
|
||||
namespace Toolkit.Avalonia;
|
||||
@@ -18,66 +19,57 @@ public class FrameHandler :
|
||||
frame.NavigationPageFactory ??= new NavigationPageFactory();
|
||||
if (args.Template is Control control)
|
||||
{
|
||||
void NavigatingFrom(Control sender)
|
||||
{
|
||||
async void HandleNavigatingFrom(object? _,
|
||||
NavigatingCancelEventArgs args)
|
||||
{
|
||||
sender.RemoveHandler(Frame.NavigatingFromEvent, HandleNavigatingFrom);
|
||||
NavigatedFrom(sender);
|
||||
|
||||
if (sender.DataContext is object content)
|
||||
{
|
||||
if (content is IConfirmation confirmation &&
|
||||
!await confirmation.Confirm())
|
||||
{
|
||||
args.Cancel = true;
|
||||
}
|
||||
|
||||
if (!args.Cancel)
|
||||
{
|
||||
if (content is IDeactivating deactivating)
|
||||
{
|
||||
await deactivating.OnDeactivating();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sender.AddHandler(Frame.NavigatingFromEvent, HandleNavigatingFrom);
|
||||
}
|
||||
|
||||
void NavigatedFrom(Control sender)
|
||||
{
|
||||
async void HandleNavigatedFrom(object? _,
|
||||
NavigationEventArgs args)
|
||||
{
|
||||
sender.RemoveHandler(Frame.NavigatedFromEvent, HandleNavigatedFrom);
|
||||
if (sender.DataContext is object content)
|
||||
{
|
||||
if (content is IDeactivated deactivated)
|
||||
{
|
||||
await deactivated.OnDeactivated();
|
||||
}
|
||||
|
||||
if (content is IDisposable disposable)
|
||||
{
|
||||
disposable.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sender.AddHandler(Frame.NavigatedFromEvent, HandleNavigatedFrom);
|
||||
}
|
||||
|
||||
void NavigatedTo(Control sender)
|
||||
{
|
||||
async void HandleNavigatedTo(object? _,
|
||||
NavigationEventArgs __)
|
||||
{
|
||||
sender.RemoveHandler(Frame.NavigatedToEvent, HandleNavigatedTo);
|
||||
NavigatingFrom(sender);
|
||||
|
||||
async void HandleNavigatingFrom(object? _,
|
||||
NavigatingCancelEventArgs args)
|
||||
{
|
||||
sender.RemoveHandler(Frame.NavigatingFromEvent, HandleNavigatingFrom);
|
||||
control.Unloaded -= HandleUnloaded;
|
||||
|
||||
async void HandleNavigatedFrom(object? _,
|
||||
NavigationEventArgs args)
|
||||
{
|
||||
sender.RemoveHandler(Frame.NavigatedFromEvent, HandleNavigatedFrom);
|
||||
if (sender.DataContext is object content)
|
||||
{
|
||||
if (content is IDeactivated deactivated)
|
||||
{
|
||||
await deactivated.OnDeactivated();
|
||||
}
|
||||
|
||||
if (content is IDisposable disposable)
|
||||
{
|
||||
disposable.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sender.AddHandler(Frame.NavigatedFromEvent, HandleNavigatedFrom);
|
||||
if (sender.DataContext is object content)
|
||||
{
|
||||
if (content is IConfirmation confirmation &&
|
||||
!await confirmation.Confirm())
|
||||
{
|
||||
args.Cancel = true;
|
||||
}
|
||||
|
||||
if (!args.Cancel)
|
||||
{
|
||||
if (content is IDeactivating deactivating)
|
||||
{
|
||||
await deactivating.OnDeactivating();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sender.AddHandler(Frame.NavigatingFromEvent, HandleNavigatingFrom);
|
||||
if (sender.DataContext is object content)
|
||||
{
|
||||
if (content is IInitializer initializer)
|
||||
@@ -90,6 +82,27 @@ public class FrameHandler :
|
||||
await activated.OnActivated();
|
||||
}
|
||||
}
|
||||
|
||||
async void HandleUnloaded(object? _, RoutedEventArgs __)
|
||||
{
|
||||
sender.RemoveHandler(Frame.NavigatingFromEvent, HandleNavigatingFrom);
|
||||
control.Unloaded -= HandleUnloaded;
|
||||
|
||||
if (control.DataContext is object content)
|
||||
{
|
||||
if (content is IDeactivated deactivated)
|
||||
{
|
||||
await deactivated.OnDeactivated();
|
||||
}
|
||||
|
||||
if (content is IDisposable disposable)
|
||||
{
|
||||
disposable.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sender.Unloaded += HandleUnloaded;
|
||||
}
|
||||
|
||||
sender.AddHandler(Frame.NavigatedToEvent, HandleNavigatedTo);
|
||||
@@ -97,7 +110,30 @@ public class FrameHandler :
|
||||
|
||||
control.DataContext = args.Content;
|
||||
NavigatedTo(control);
|
||||
frame.NavigateFromObject(control, new FrameNavigationOptions { TransitionInfoOverride = new SuppressNavigationTransitionInfo() });
|
||||
|
||||
FrameNavigationOptions navigationOptions = new();
|
||||
if (args.Parameters is not null)
|
||||
{
|
||||
if (args.Parameters.TryGetValue("Transition", out object? transition))
|
||||
{
|
||||
switch($"{transition}")
|
||||
{
|
||||
case "FromLeft":
|
||||
case "FromRight":
|
||||
case "FromTop":
|
||||
case "FromBottom":
|
||||
navigationOptions.TransitionInfoOverride =
|
||||
new SlideNavigationTransitionInfo
|
||||
{
|
||||
Effect = Enum.Parse<SlideNavigationTransitionEffect>($"{transition}")
|
||||
};
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
frame.NavigateFromObject(control, navigationOptions);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,6 +144,12 @@ public class FrameHandler :
|
||||
{
|
||||
if (args.Context is Frame frame)
|
||||
{
|
||||
//NavigationTransitionInfo? navigationTransitionInfo = null;
|
||||
//if (frame.Content is IBackwardNavigation navigation)
|
||||
//{
|
||||
// navigationTransitionInfo = navigation.Transition;
|
||||
//}
|
||||
|
||||
frame.GoBack();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user