我使用Prism Library进行Xamarin.Forms。
我将通过Control模板创建自定义导航栏。 (创建自定义导航栏的原因 - 我没有找到使导航栏对显示背景图像透明的解决方案,我也可能会自定义导航栏并在其上添加一些控件)。
<ControlTemplate x:Key="NavigationPageTemplate">
<AbsoluteLayout BackgroundColor="Transparent">
<Image AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All"
Aspect="AspectFill"
Source="{TemplateBinding BackgroundImageEx}" />
<ContentView Padding="0,50,0,0"
AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All">
<ContentPresenter />
</ContentView>
<!--Navigation bar started here -->
<ContentView AbsoluteLayout.LayoutBounds="0,0,1,AutoSize"
AbsoluteLayout.LayoutFlags="PositionProportional, WidthProportional"
BackgroundColor="Transparent">
<ContentView.Padding>
<OnPlatform x:TypeArguments="Thickness"
Android="10"
iOS="10, 20, 10, 0" />
</ContentView.Padding>
<controls:ImageButton Command="{TemplateBinding GoBackCommand}"
HeightRequest="30"
HorizontalOptions="StartAndExpand"
Source="ic_back.png"
WidthRequest="30">
</controls:ImageButton>
</ContentView>
</AbsoluteLayout>
</ControlTemplate>
我的问题是使用Prism Navigation处理后退按钮。 我试图点击MyApp.xaml.cs文件。
private void Button_OnClicked(object sender, EventArgs e)
{
NavigationService.GoBackAsync();
}
它似乎有不同的导航堆栈,因为它显示在按下我的第一页之后。
我用这种方式导航:
Navigate("FirstPage");
- &gt; Navigate(MasterDetail/NavigationPage/ViewA)
- &gt; Navigate("ViewB")
ViewB - 使用控制模板。
当我单击ViewB NavigationService上的自定义后退按钮时,请回到FirstPage。这对我来说不对。我应该回到ViewA!
另一个问题当我们更改App.MainPage时,首页应该保存吗?
答案 0 :(得分:0)
要从ViewA导航回FirstPage,您可以拦截后退事件,如果从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();
}
}
我不明白你的第二个问题。
答案 1 :(得分:0)