使用Xamarin表单和prism BREAKED的自定义导航栏

使用Xamarin表单和prism BREAKED的自定义导航栏,xamarin,xamarin.forms,prism,Xamarin,Xamarin.forms,Prism,我正在使用Prism Library for Xamarin.Forms 我将通过控件模板创建自定义导航栏。(创建自定义导航栏的原因-我没有找到使导航栏对显示背景图像透明的解决方案,而且我可能会自定义导航栏并在其上添加一些控件) 我的问题是用棱镜导航处理后退按钮。 我已尝试处理单击MyApp.xaml.cs文件 private void按钮_onclick(对象发送方,事件参数e) { NavigationService.GoBackAsync(); } 它似乎有不同的导航堆栈,因为它在按

我正在使用Prism Library for Xamarin.Forms

我将通过控件模板创建自定义导航栏。(创建自定义导航栏的原因-我没有找到使导航栏对显示背景图像透明的解决方案,而且我可能会自定义导航栏并在其上添加一些控件)


我的问题是用棱镜导航处理后退按钮。 我已尝试处理单击MyApp.xaml.cs文件

private void按钮_onclick(对象发送方,事件参数e)
{
NavigationService.GoBackAsync();
}
它似乎有不同的导航堆栈,因为它在按下我的第一页后显示

我的导航是这样的:

导航(“首页”)->
导航(MasterDetail/NavigationPage/ViewA)
->
导航(“ViewB”)
ViewB-使用控件模板

当我单击ViewB NavigationService上的“自定义返回”按钮时,会将我返回到第一页。这对我来说是不正确的。我应该回到ViewA


另一个问题是,当我们更改App.MainPage时,是否应保存首页?

要从ViewA导航回首页,您可以截取返回事件,并在ViewB页传递带有特定值的变量时再次返回。代码示例:

发件人:

var navigationParams = new NavigationParameters();
navigationParams.Add("yourVariableName", "YourVariableValue");
_navigationService.GoBackAsync(navigationParams);
接收人:

public void OnNavigatedTo(NavigationParameters parameters)
        {
  string myVar = null;
            if (parameters.ContainsKey("yourVariableName"))
            {
                myVar = (string)parameters["yourVariableName"];
            }
  if(myVar=="YourVariableValue"){
     NavigationService.GoBackAsync();
  }
}

我不明白你的第二个问题。

请参阅第二个问题中描述的问题的讨论。为什么我的第一页仍在内存中,并且没有从NavigationStack中删除?我认为这没关系,因为它是一个堆栈,所以是后进先出(后进先出)。您不能删除第一个页面,删除它的唯一方法是删除所有页面,因为它是堆栈中的第一个页面,所以最后一个页面将退出。