Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测是否在NavigationContext中调用了GoBack()_C#_.net_Wpf_Prism - Fatal编程技术网

C# 检测是否在NavigationContext中调用了GoBack()

C# 检测是否在NavigationContext中调用了GoBack(),c#,.net,wpf,prism,C#,.net,Wpf,Prism,在实现IConfirmNavigationRequest的视图中,我使用了四个导航转换动画:ForwardIn、ForwardOut、backardin和backardOut 我使用ConfirmNavigationRequest在导航之前等待Out转换完成。但是,根据导航类型(使用RequestNavigate()向前或使用GoBack()向后),我想播放不同的故事板: public void ConfirmNavigationRequest(NavigationContext nav

在实现IConfirmNavigationRequest的视图中,我使用了四个导航转换动画:ForwardIn、ForwardOut、backardin和backardOut

我使用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();
    }
public void ConfirmNavigationRequest(NavigationContext NavigationContext,Action continuationCallback)
{
故事板;
如果(navigationContext./*是否调用了RequestNavigate()或GoBack()?*/)
{
//返回导航请求。
情节提要=((情节提要)FindResource(RegionTransitions.backardout));
}
其他的
{
//前向导航请求。
情节提要=((情节提要)FindResource(RegionTransitions.ForwardOut));
}
情节提要.Completed+=(发送方,参数)=>continuationCallback(true);
故事板。开始();
}
是否有任何准确且可预测的方法来检测NavigationContext使用了哪种类型的导航

编辑:我已经放弃使用IConfirmNavigation进行转换,现在使用的是AnimatedContentControl

我不太喜欢它,但我发布了一个事件来“警告”AnimatedContentControl下一次导航应该使用特定的转换:

_eventAggregator.GetEvent<RegionTransitionEvent>().Publish(new RegionTransitionEventArgs { RegionName = RegionNames.NavRegion, RegionTransition = RegionTransitions.BackwardIn });

_regionManager.RequestNavigate(RegionNames.ContentRegion, ViewNames.ABC);
\u eventAggregator.GetEvent().Publish(新RegionTransitionEventArgs{RegionName=RegionNames.NavRegion,RegionTransition=RegionTransitions.Backardin});
_regionManager.RequestNavigate(RegionNames.ContentRegion,ViewNames.ABC);

您可以在视图或viewmodel中实现
iAvigationAware
界面

此接口将实现3种方法

public interface INavigationAware
{
    void OnNavigatedTo(NavigationContext navigationContext);
    bool IsNavigationTarget(NavigationContext navigationContext);
    void OnNavigatedFrom(NavigationContext navigationContext);
}

将允许您确定它是否是往返于某处的导航。您甚至可以确定导航来自哪个视图。

谢谢,但IConfirmNavigationRequest实现了INavigationAware。我问的是传递到这些方法中的NavigationContext,以及是否可以检测用户是导航到新页面还是向后导航到上一页面。简单地说,没有。我查看了导航章节,似乎找不到任何可以检测您是使用GoBack还是GoForward的内容。但是,当然也有一些“肮脏”的方法。你能找到解决问题的方法吗。我还想知道导航是否由反向导航产生?