Files
Toolkit2/Toolkit.Foundation.Avalonia/Navigation/FrameHandler.cs
T
2022-12-05 18:52:37 +00:00

36 lines
1.2 KiB
C#

using Avalonia.Controls.Primitives;
using FluentAvalonia.UI.Controls;
using FluentAvalonia.UI.Navigation;
using Toolkit.Foundation.Avalonia;
namespace Kromek.Framework.Avalonia
{
public class FrameHandler : NavigationRouteHandler<Frame>
{
public override async void Receive(NavigationRouteRequest<Frame> message)
{
message.Target.NavigationPageFactory = new NavigationPageFactory();
TaskCompletionSource<bool> completionSource = new();
if (message.Template is TemplatedControl content)
{
void HandleNavigated(object sender, NavigationEventArgs args)
{
message.Target.Navigated -= HandleNavigated;
if (message.Target.Content is TemplatedControl control)
{
control.DataContext = message.Data;
completionSource.SetResult(true);
}
}
message.Target.Navigated += HandleNavigated;
message.Target.NavigateFromObject(content);
}
bool result = await completionSource.Task;
message.Reply(result);
}
}
}