Files
Toolkit2/Toolkit.Foundation.Avalonia/Navigation/FrameHandler.cs
T
Daniel Clark 1cd2141ad5 More changes
2022-12-05 19:41:42 +00:00

35 lines
1.2 KiB
C#

using Avalonia.Controls.Primitives;
using FluentAvalonia.UI.Controls;
using FluentAvalonia.UI.Navigation;
namespace Toolkit.Foundation.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);
}
}
}