在实现IConfirmNavigationRequest的视图中,我使用了四个导航过渡动画:ForwardIn,ForwardOut,BackwardIn和BackwardOut。
我正在使用ConfirmNavigationRequest在导航之前等待Out过渡完成。但是,根据导航的类型 - 使用RequestNavigate()向前或使用GoBack()向后 - 我想播放不同的故事板:
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
Storyboard storyboard;
if (navigationContext./* was RequestNavigate() or GoBack() called? */)
{
// GoBack navigation request.
storyboard = ((Storyboard)FindResource(RegionTransitions.BackwardOut));
}
else
{
// Forward navigation request.
storyboard = ((Storyboard)FindResource(RegionTransitions.ForwardOut));
}
storyboard.Completed += (sender, args) => continuationCallback(true);
storyboard.Begin();
}
是否有任何准确且可预测的方法来检测NavigationContext中使用的导航类型?
编辑:我已经放弃使用IConfirmNavigation进行转换,现在正在使用AnimatedContentControl。
我真的不喜欢它,但是我发布了一个事件'警告'AnimatedContentControl,下一个导航应该使用特定的过渡:
_eventAggregator.GetEvent<RegionTransitionEvent>().Publish(new RegionTransitionEventArgs { RegionName = RegionNames.NavRegion, RegionTransition = RegionTransitions.BackwardIn });
_regionManager.RequestNavigate(RegionNames.ContentRegion, ViewNames.ABC);
答案 0 :(得分:1)
您可以在视图或视图模型中实现INavigationAware
界面。
此界面将实现3种方法。
public interface INavigationAware
{
void OnNavigatedTo(NavigationContext navigationContext);
bool IsNavigationTarget(NavigationContext navigationContext);
void OnNavigatedFrom(NavigationContext navigationContext);
}
将允许您确定它是否是某个地方的导航。您甚至可以确定导航来自哪个视图。